Nginx容器不使用nginx.conf,除非我重新启动容器

时间:2020-07-09 20:42:01

标签: docker nginx docker-compose

正如标题所述,除非重新启动,否则我的nginx容器无法正常工作。我在docker-compose.yml文件中定义了一些服务,如下所示:reverseproxy是我的nginx容器,service-aservice-b是Node.js服务器。

version: "3.4"
services:
  reverseproxy:
    container_name: reverseproxy
    build:
      context: ./proxy
    ports:
      - "80:80"
  service-a:
    container_name: service-a
    build:
      context: ./service-a
    ports:
      - "3500:3500"
    command: ["yarn", "run", "watch-debug"]
  service-b:
    container_name: service-b
    build:
      context: ./service-b
    ports:
      - "3501:3501"
    command: ["yarn", "run", "watch-debug"]

用于构建我的Dockerfile服务的reverseproxy只是删除default.conf文件,然后将nginx.conf文件从我的主机复制到映像:

FROM nginx:alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/nginx.conf

我的nginx.conf文件被复制到图像中,如下所示:

worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    server {
        listen 80;

        location /api/customers {
            proxy_pass         http://service-a:3500;
            proxy_redirect     off;
            proxy_set_header   Host $http_host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }

        location /api/products {
            proxy_pass         http://service-b:3501;
            proxy_redirect     off;
            proxy_set_header   Host $http_host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }
}

当我docker-compose up一切正常时,但是当我发布到我的一个端点(例如localhost:80 / api / customers)时,nginx会返回502。但是如果我{{1} },然后docker container stop reverseproxy,那么一切都会按预期进行,并且我可以使用localhost:80到达端点。

我能够docker container start reverseproxy并能够验证docker exec -it reverseproxy /bin/sh已经消失,并且default.conf已从主机上按预期复制。我遵循了Docker Hub上nginx页面上的示例配置,并且大多数在线教程显示了几乎相同的设置。

可能是什么原因造成的?如何在不重新启动容器的情况下使我的nginx revereproxy服务按预期工作?

编辑:我正在使用Postman发出我的请求localhost:80

1 个答案:

答案 0 :(得分:1)

@DavidMaze有正确的解决方案-谢谢!

  reverseproxy:
    container_name: reverseproxy
    build:
      context: ./proxy
    ports:
      - "80:80"
    depends_on:
      - "service-a"
      - "service-b"

感觉到它只能在重新启动时按预期工作,因为那时其他服务可用。只是尝试了一下,它可以按预期工作。