正如标题所述,除非重新启动,否则我的nginx容器无法正常工作。我在docker-compose.yml
文件中定义了一些服务,如下所示:reverseproxy
是我的nginx容器,service-a
和service-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
答案 0 :(得分:1)
@DavidMaze有正确的解决方案-谢谢!
reverseproxy:
container_name: reverseproxy
build:
context: ./proxy
ports:
- "80:80"
depends_on:
- "service-a"
- "service-b"
感觉到它只能在重新启动时按预期工作,因为那时其他服务可用。只是尝试了一下,它可以按预期工作。