7

I'm trying to install php-fpm and nginx via docker and I have a problem with nginx which returns me a 502 Bad gateway error, however when I try to go on any HTML file only displays correctly. What must I do to a php file works correctly with this system?

Nginx config site:

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;
#   }
#}
5
  • did you see anything interesting in nginx's logs ? in php-fpm logs ?
    – greg0ire
    May 17, 2014 at 16:10
  • And what does netstat -lntp output ?
    – greg0ire
    May 17, 2014 at 16:12
  • Nginx log connect() to unix:/var/run/php5-fpm.sock failed (111: Connection refused) or according to my tests failed (2: No such file or directory) while connecting to upstream
    – Flug
    May 17, 2014 at 23:26
  • netstat Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN - Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 1820188 - /var/run/php5-fpm.sock
    – Flug
    May 18, 2014 at 12:44
  • Don't use comments for this, update your question. And you can answer your own question if you have the solution.
    – greg0ire
    May 18, 2014 at 16:06

2 Answers 2

3

Ok, I solved my problem, that's how I did it:

docker run -i -t ubuntu /bin/bash

Then I looked at the nginx logs that indicated a problem with the upstream php fpm server as shown above

tail -f /var/log/nginx/*

Finally I restart the php5-fpm service

service php5-fpm restart

So finally my problem is that during the installation of container service was launched but with php misconfiguration and thus restarting the service has reloaded the php5-fpm configuration

3

You are making the faulty assumption that a docker container is just another machine or vm. With Docker should always try to run one thing only per container. You are then supposed to use links and volumes to make them talk together.

CMD should start the program directly and the daemon should instead be configured to run in the foreground, thus not as a service. Logs should preferably also be forwarded to docker but that is a bit beyond me (see the official app builds on github).

Also make sure that certain things are not run as root, because Docker does not offer proper security isolation features at this time.

In the end your issue is resolved by taking a look at their newly improved documentation and learning the essentials.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .