【发布时间】:2019-08-06 19:27:54
【问题描述】:
我在这方面已经很长时间了,但我似乎无法解决这个问题。我真的被困住了......所以我求助于你们。
我正在尝试一些可能很简单的东西。我想使用 nginx 作为前端的反向代理。
Docker-compose
version: '3.7'
services:
frontend:
expose:
- 9080
build: "./"...""
volumes:
- ./"..."/build:/usr/src/kitschoen-rj/
nginx:
build: ./nginx
volumes:
- static_volume:/usr/src/"..."/staticfiles
ports:
- 8080:8080
depends_on:
- restapi
volumes:
static_volume:
nginx.conf
upstream kitschoen_frontend {
server frontend:9080;
}
server {
listen 8080;
location / {
proxy_pass http://kitschoen_frontend;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
我根本想不通,为什么我在访问“localhost:8080”时收到“Bad Gateway”错误。
【问题讨论】:
-
您的前端容器已启动并在容器内监听 0.0.0.0:9080? (不是本地主机)。
-
kitschoen_docker_frontend "nginx -g 'daemon of ..." 19 分钟前 Up 4 seconds 80/tcp, 9080/tcp kitschoen_docker_frontend_1
-
是的,据我所知,docker 容器已启动并运行,正在侦听端口 9080。如果我自己构建 react 映像,它可以正常工作。我可以在本地主机上看到页面。
-
这可能是由于 nginx 启动并在您的 API 准备好之前尝试到达上游造成的。请参阅此帖子:stackoverflow.com/questions/32845674/… 尝试
docker exec -it nginx sh并运行getent hosts frontend,它应该返回您尝试运行的前端容器的IP。使用 curl 或 wget(例如curl frontend:9080)验证它是否正在响应,如果它确实检查 nginx 错误日志以确保它能够在启动时加入前端。 -
感谢您的回答。 getent 主机前端返回了 ip。但是在容器上运行 wget frontend: 9080 返回:
Connecting to frontend:9080 (xxx.xx.x.x:9080) wget: can't connect to remote host (xxx.xxx.x.x): Connection refused。我不确定这告诉我什么