Bad Gateway nginx для докера - PullRequest
       6

Bad Gateway nginx для докера

0 голосов
/ 27 октября 2018

Я пытался выяснить, в чем проблема за последние 4 часа, но безуспешно.У меня есть два контейнера.PHP и nginx.Первый в docker/php/dockerFile:

FROM php:7.2.2-fpm

...

# Install Composer
...

# install node and npm
...

WORKDIR /var/www/

COPY post_run_web.sh /usr/local/bin/
RUN chmod 755 /usr/local/bin/post_run_web.sh

и второй в docker/nginx/dockerFile:

FROM nginx:1.10

ADD ./vhost.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www

и в docker/nginx/vhost.conf

...
    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }
...

И мой docker-compose.yml file

version: '3'
networks:
  backend:
    driver: bridge
  frontend:
      driver: bridge
services:
  web:
    build:
      context: ./docker/nginx
      dockerfile: dockerFile
    container_name: "TEST_web"
    volumes:
      - ./:/var/www
    ports:
      - "80:80"
    links:
      - app
    depends_on:
      - app
    networks:
      - backend

  app:
    build:
      context: ./docker/php
      dockerfile: dockerFile
    container_name: "TEST_php"
    volumes:
      - ./:/var/www
    networks:
      - backend
    tty: true
    entrypoint: ["/usr/local/bin/post_run_web.sh", "dev"]
  ...

Я запускаю свои контейнеры с docker-compose up.Проблема в том, что мой контейнер TEST_php остановился автоматически из-за моей опции post_run_web.sh in entrypoint.Поэтому я добавил tail -f /dev/null в docker/php/post_run_web.sh, чтобы контейнер работал:

#!/bin/bash

cd /var/www
composer install
npm install
npm run $1

tail -f /dev/null

Теперь я вижу, что все контейнеры работают, но при попытке доступа через браузер выдается ошибка Bad Gateway nginx.Если я удаляю точку входа из файла yml и пытаюсь выполнить post_run_web.sh вручную после запуска контейнера, все работает нормально.Как я могу это исправить и сохранить опцию точки входа?

1 Ответ

0 голосов
/ 28 октября 2018

Я боролся с этим последние несколько дней.Некоторые общие проблемы, которые я обнаружил:

  • Невозможность выставить 9000 (или любой другой порт, который прослушивает php-fpm).Это похоже на ваш случай.
  • Конфигурация php-fmp: он может использовать сокет Unix вместо прослушивания в этом порту.Ищите в конфиге php-fpm.Директива listen должна быть listen = 0.0.0.0:9000.Возможно, вам потребуется ADD/COPY конфигурация.
  • Возможно, служба php-fpm не запущена
  • Контейнеры могут быть не связаны (не ваш случай)

Я подозреваю, что проблема может заключаться в том, что php-fpm не запускается, потому что вы определили свою собственную точку входа, переопределив точку входа по умолчанию для изображения php-fpm7.2, которая запускает службу.Попробуйте запустить службу в post_run_web.sh.

Надеюсь, это поможет.

...