【问题标题】:Bad Gateway nginx for docker containerDocker 容器的错误网关 nginx
【发布时间】:2018-10-27 18:44:50
【问题描述】:

我试图找出过去 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 文件

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 容器由于我在entrypoint 选项中的post_run_web.sh 而自动停止。所以我在docker/php/post_run_web.sh 中添加了tail -f /dev/null 以保持容器运行:

#!/bin/bash

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

tail -f /dev/null

现在我看到所有容器都在运行,但在尝试通过浏览器访问时出现 Bad Gateway nginx 错误。如果我从yml 文件中删除入口点,并在容器启动后尝试手动执行post_run_web.sh,则一切正常。
如何修复它并保留我的入口点选项?

【问题讨论】:

  • 您是否尝试在应用服务上公开端口 9000?

标签: php docker nginx docker-compose


【解决方案1】:

过去几天我一直在为此苦苦挣扎。我发现的一些常见问题是:

  • 不暴露 9000(或任何其他 php-fpm 正在侦听的端口)。这看起来像你的情况。
  • php-fmp 配置:它可以使用 unix socket 而不是监听 港口。在 php-fpm 配置中查找。监听指令应该是listen = 0.0.0.0:9000。您可能需要ADD/COPY 配置。
  • php-fpm 服务可能没有运行
  • 容器可能未链接(不是您的情况)

我怀疑问题可能是 php-fpm 没有启动,因为您定义了自己的入口点,覆盖了启动服务的默认 php-fpm7.2 图像入口点。尝试在post_run_web.sh 中启动服务。

希望这会有所帮助。

【讨论】:

  • 谢谢,在post_run_web.sh 末尾添加php-fpm -F -R 后工作正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2021-04-09
  • 1970-01-01
  • 2020-01-28
相关资源
最近更新 更多