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



正如标题所说,除非重新启动,否则我的nginx容器无法按预期工作。我在一个docker-compose.yml文件中定义了几个服务,如下所示:reverseproxy是我的ngingx容器,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"]

用于构建reverseproxy服务的Dockerfile只需删除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时,一切都很好,但当我POST到我的一个端点(例如localhost:80/api/customers(时,nginx会以502响应。但是,如果我先docker container stop reverseproxy,然后docker container start reverseproxy,那么一切都如预期的那样工作,并且我能够使用localhost:80访问我的端点。

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

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

编辑:我正在使用Postman进行请求localhost:80

@DavidMaze给出了正确的解决方案——谢谢!

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

它只在重新启动时按预期工作是有道理的,因为那时其他服务都可用。只是试了一下,结果不出所料。

最新更新