Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple docker-compose with two services: nginx and php

I'm beginning with Docker and nginx, and I'm trying to setup a two container environment running:

  • nginx:latest on one side
  • php:fpm on the other side

I'm having trouble with php-fpm: I always get a 502 Bad Gateway error.

My setup is straightforward ($TEST_DIR is my working directory).

My Docker compose config TEST_DIR/docker-compose.yml:

nginx:
    image: nginx
    ports:
        - "8080:80"
    volumes:
        - ./www:/usr/share/nginx/html
        - ./conf/nginx.conf:/nginx.conf
        - ./logs/nginx:/var/log/nginx
    links:
        - php:php
    command: nginx -c /nginx.conf

php:
    image: php:fpm
    ports:
        - "9000:9000"
    volumes:
        - ./www:/var/www/html

The nginx config $TEST_DIR/conf/nginx.conf:

user  nginx;
worker_processes  1;
pid        /var/run/nginx.pid;

events {
    worker_connections  2048;
    multi_accept on;
    use epoll;
}

http {

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    server_tokens off;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 15;
    types_hash_max_size 2048;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    access_log off;
    error_log off;
    gzip on;
    gzip_disable "msie6";
    open_file_cache max=100;


    upstream php-upstream {
        server php:9000;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

        # Pass PHP scripts to PHP-FPM
        location ~* \.php$ {
            fastcgi_pass    php-upstream;

            include         fastcgi_params;
            fastcgi_param   SCRIPT_FILENAME    /var/www/html$fastcgi_script_name;
            fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
            fastcgi_param   HTTPS off;
        }

        error_log  /var/log/nginx/php_error.log;
        access_log  /var/log/nginx/php_access.log;
    }
}

daemon off;

Then, I put my PHP content in the same directory as my docker-compose.yml:

$TEST_DIR/www/test.php

<?php phpinfo(); ?>

If I start the infrastructure using docker-compose up and then go to localhost:8080/test.php, then I get the 502 Bad Gateway and the following error from nginx:

[error] 6#6: *1 connect() failed (113: No route to host) while connecting to upstream, client: 172.17.42.1, server: localhost, request: "GET /phpinsfo2.php HTTP/1.1", upstream: "fastcgi://172.17.0.221:9000", host: "localhost:8080"

What is causing the error?

like image 692
Clement Avatar asked Sep 27 '22 09:09

Clement


1 Answers

I finally managed to make it work.

The problem was that my host computer (Fedora 21) had a firewall enabled.

So doing: systemctl stop firewalld solved my problem.

Apparently this is a well known problem at Red Hat Linux:
Bug 1098281 - Docker interferes with firewall initialisation via firewalld

like image 152
Clement Avatar answered Sep 30 '22 01:09

Clement