Docker + nginx + Php-FPM 502 Плохой шлюз

Я пытаюсь установить php-fpm и nginx через docker, и у меня проблема с nginx, которая возвращает мне ошибку 502 Bad gateway, однако, когда я пытаюсь перейти к любому HTML-файлу, отображается только правильно. Что я должен сделать, чтобы файл php корректно работал с этой системой?

Конфигурационный сайт Nginx:

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 complainingRUN dpkg-divert --local --rename --add /sbin/initctlRUN ln -sf /bin/true /sbin/initctl# Let the conatiner know that there is no ttyENV DEBIAN_FRONTEND noninteractiveRUN locale-gen en_US.UTF-8ENV LANG       en_US.UTF-8ENV LC_ALL     en_US.UTF-8RUN apt-get update && apt-get upgrade -yRUN apt-get -y install nginx php5-fpm php5-mysql php-apc pwgen python-setuptools curl git unzipRUN apt-get -y install php5-curl php5-gd php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-sqlite php5-tidy php5-xmlrpcVOLUME  ["/var/log/nginx"]CMD echo "127.0.0.1      api.local.dev" >> /etc/hostsEXPOSE 80RUN mkdir /wwwRUN chown www-data:www-data -R /wwwRUN echo "<?php phpinfo()  ?>" > /www/index.phpRUN cat /www/index.phpRUN mkdir /dockerADD nginx /docker/nginxRUN mkdir -p /var/log/nginxRUN chown www-data:www-data /var/log/nginxRUN sed -i -e"s/keepalive_timeout\s*65/keepalive_timeout 2/" /etc/nginx/nginx.confRUN sed -i -e"s/keepalive_timeout 2/keepalive_timeout 2;\n\tclient_max_body_size 100m/" /etc/nginx/nginx.confRUN sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php5/fpm/php.iniRUN sed -i -e "s/upload_max_filesize\s*=\s*2M/upload_max_filesize = 100M/g" /etc/php5/fpm/php.iniRUN sed -i -e "s/post_max_size\s*=\s*8M/post_max_size = 100M/g" /etc/php5/fpm/php.iniRUN sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php5/fpm/php-fpm.confRUN sed -i -e "s/;catch_workers_output\s*=\s*yes/catch_workers_output = yes/g" /etc/php5/fpm/pool.d/www.confRUN cat /etc/php5/fpm/pool.d/www.confRUN 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.iniRUN cat /docker/nginx/api.local.dev >  /etc/nginx/sites-available/api.local.devRUN ln -s /etc/nginx/sites-available/api/local.dev /etc/nginx/sites-enabled/api/local.devRUN echo "daemon off;" >> /etc/nginx/nginx.confCMD ["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 - это просто другая машина или виртуальная машина. С помощью Docker всегда следует пытаться запускать только одну вещь для каждого контейнера. Затем вы должны использовать ссылки и тома, чтобы заставить их говорить вместе.

CMD должен запускать программу напрямую, а демон вместо этого должен быть настроен на запуск на переднем плане, таким образом, не как служба. Журналы желательно также пересылать в docker, но это немного выше моих сил (см. Официальные сборки приложений на github).

Также убедитесь, что некоторые функции не запускаются от имени root, поскольку в настоящее время Docker не предлагает надлежащих функций изоляции безопасности.

В конце концов, ваша проблема будет решена, если вы ознакомитесь с их недавно улучшенной документацией и изучите основы.

Хорошо, я решил свою проблему, вот как я это сделал:

docker run -i -t ubuntu /bin/bash

Затем я просмотрел журналы nginx, которые указывали на проблему с вышестоящим сервером php fpm, как показано выше

tail -f /var/log/nginx/*

Наконец, я перезапускаю службу php5-fpm

service php5-fpm restart

Итак, наконец, моя проблема заключается в том, что во время установки был запущен контейнерный сервис, но с неправильной конфигурацией php, и, таким образом, перезапуск службы перезагрузил конфигурацию php5-fpm

Журнал Nginx

ошибка подключения() к unix:/var/run/php5-fpm.sock (111: отказано в подключении)

или в соответствии с моими тестами

сбой (2: Нет такого файла или каталога) при подключении к восходящему потоку

netstat Активные подключения к Интернету (только серверы)
Proto Recv-Q Send-Q Локальный адрес Внешний адрес Состояние PID/Имя программы
tcp 0 0 0.0.0.0:80 0.0.0.0:* ПРОСЛУШИВАНИЕ -
Активные доменные сокеты UNIX (только серверы)
Флаги Proto RefCnt Тип состояния I-узла PID/Путь к имени программы
unix 2 [ ACC ] ПРОСЛУШИВАНИЕ ПОТОКА 1820188 - /var/run/php5-fpm.sock

Не используйте для этого комментарии, обновите свой вопрос. И вы можете ответить на свой собственный вопрос, если у вас есть решение.

вы видели что-нибудь интересное в журналах nginx? в журналах php-fpm ?

И что выводит netstat -lntp?