502 Bad Gateway Docker + Laravel

I've started to learn Docker. I have Laravel application and want to start it in docker containers. But I can't run it correctly.

I have this docker-compose.yml:

version: '2'
services:

  # The Application
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ./:/var/www
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"

  # The Web Server
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    volumes_from:
      - app
    ports:
      - 8080:80

  # The Database
  database:
    image: mysql:5.6
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      - "MYSQL_DATABASE=homestead"
      - "MYSQL_USER=homestead"
      - "MYSQL_PASSWORD=secret"
      - "MYSQL_ROOT_PASSWORD=secret"
    ports:
        - "33061:3306"

volumes:
  dbdata:

And this vhost.conf:

server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

app.dockerfile:

FROM php:7.1.3-fpm

RUN apt-get update && apt-get install -y \
    libmagickwand-dev --no-install-recommends \
    libmcrypt-dev \
    cron \
    mysql-client \
    vim \
    && docker-php-ext-install mcrypt pdo_mysql

web.dockerfile:

FROM nginx:1.10

ADD vhost.conf /etc/nginx/conf.d/default.conf

After run containers I have 502 Bad Gateway and in web container I have this: connect() failed (111: Connections refused) while connecting to upstream, client: 192.168.99.1, server: request "GET /HTTP/1.1", upstream: "fastcgi://172.19.0.3:9000", host: "192.168.99.101:8080".

I very bad at server settings and don't understand what happened. Will be very grateful for every help.

1 answer

  • answered 2018-11-08 08:32 Ilyas Deckers

    This is probably caused by php listening on localhost and doe not accept external connections. You should update you php.ini to listen on 0.0.0.0.

    you could test this by running the following command on your app container. And try to telnet from the web container to the app container.

    /usr/bin/php -S 0.0.0.0:9000
    
    telnet app 9000
    

    If, for some reason that command fails try to edit your php-fpm config to set the listen address to 0.0.0.0:9000

    Example:

    ; The address on which to accept FastCGI requests.
    ; Valid syntaxes are:
    ;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
    ;                            a specific port;
    ;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
    ;                            a specific port;
    ;   'port'                 - to listen on a TCP socket to all addresses
    ;                            (IPv6 and IPv4-mapped) on a specific port;
    ;   '/path/to/unix/socket' - to listen on a unix socket.
    ; Note: This value is mandatory.
    
    listen = 0.0.0.0:9000