我试图通过docker安装php-fpm和nginx,我有一个nginx的问题,它返回了502错误的网关错误,但是当我尝试去任何HTML文件只显示正确。 我必须做什么,以一个PHP文件正常工作与这个系统?
Nginxconfiguration网站:
server { listen 80; server_name api.local.dev; access_log /var/log/nginx/api.access.log; error_log /var/log/nginx/api.error.log; root /www; charset utf-8; index index.php index.html index.htm; location / { index index.php index.html index.htm; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
Dockerfile
FROM ubuntu:13.10 # Keep upstart from complaining RUN dpkg-divert --local --rename --add /sbin/initctl RUN ln -sf /bin/true /sbin/initctl # Let the conatiner know that there is no tty ENV DEBIAN_FRONTEND noninteractive RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LC_ALL en_US.UTF-8 RUN apt-get update && apt-get upgrade -y RUN apt-get -y install nginx php5-fpm php5-mysql php-apc pwgen python-setuptools curl git unzip RUN apt-get -y install php5-curl php5-gd php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-sqlite php5-tidy php5-xmlrpc VOLUME ["/var/log/nginx"] CMD echo "127.0.0.1 api.local.dev" >> /etc/hosts EXPOSE 80 RUN mkdir /www RUN chown www-data:www-data -R /www RUN echo "<?php phpinfo() ?>" > /www/index.php RUN cat /www/index.php RUN mkdir /docker ADD nginx /docker/nginx RUN mkdir -p /var/log/nginx RUN chown www-data:www-data /var/log/nginx RUN sed -i -e"s/keepalive_timeout\s*65/keepalive_timeout 2/" /etc/nginx/nginx.conf RUN sed -i -e"s/keepalive_timeout 2/keepalive_timeout 2;\n\tclient_max_body_size 100m/" /etc/nginx/nginx.conf RUN sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php5/fpm/php.ini RUN sed -i -e "s/upload_max_filesize\s*=\s*2M/upload_max_filesize = 100M/g" /etc/php5/fpm/php.ini RUN sed -i -e "s/post_max_size\s*=\s*8M/post_max_size = 100M/g" /etc/php5/fpm/php.ini RUN sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php5/fpm/php-fpm.conf RUN sed -i -e "s/;catch_workers_output\s*=\s*yes/catch_workers_output = yes/g" /etc/php5/fpm/pool.d/www.conf RUN cat /etc/php5/fpm/pool.d/www.conf RUN find /etc/php5/cli/conf.d/ -name "*.ini" -exec sed -i -re 's/^(\s*)#(.*)/\1;\2/g' {} \; RUN echo "cgi.fix_pathinfo = 0;" >> /etc/php5/fpm/php.ini RUN cat /docker/nginx/api.local.dev > /etc/nginx/sites-available/api.local.dev RUN ln -s /etc/nginx/sites-available/api/local.dev /etc/nginx/sites-enabled/api/local.dev RUN echo "daemon off;" >> /etc/nginx/nginx.conf CMD ["nginx"]
nginx.conf
user www-data; worker_processes 4; pid /run/nginx.pid; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## fastcgi_buffers 8 16k; fastcgi_buffer_size 32k; gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; ## # nginx-naxsi config ## # Uncomment it if you installed nginx-naxsi ## #include /etc/nginx/naxsi_core.rules; ## # nginx-passenger config ## # Uncomment it if you installed nginx-passenger ## #passenger_root /usr; #passenger_ruby /usr/bin/ruby; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } #mail { # # See sample authentication script at: # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript # # # auth_http localhost/auth.php; # # pop3_capabilities "TOP" "USER"; # # imap_capabilities "IMAP4rev1" "UIDPLUS"; # # server { # listen localhost:110; # protocol pop3; # proxy on; # } # # server { # listen localhost:143; # protocol imap; # proxy on; # } #}
好的,我解决了我的问题,我就这样做了:
docker run -i -t ubuntu /bin/bash
然后我看了看上面显示的上游php fpm服务器的nginx日志
tail -f /var/log/nginx/*
最后我重新启动php5-fpm服务
service php5-fpm restart
所以最后我的问题是,在安装容器服务启动,但与PHP错误configuration,因此重新启动服务重新加载了php5-fpmconfiguration
你正在做错误的假设,docker集装箱只是另一台机器或VM。 与Docker应该总是尝试运行一个只有每个容器的东西。 那么你应该使用链接和卷来使他们一起谈话。
CMD应该直接启动程序,守护进程应该被configuration为在前台运行,因此不能作为服务。 日志应该最好也被转发到docker工人,但这是有点超越我(见官方应用程序build立在github上)。
还要确保某些东西不以root身份运行,因为Docker目前不提供适当的安全隔离function。
最后,通过查看最新改进的文档并了解要点,解决您的问题。