【发布时间】:2020-02-26 23:22:35
【问题描述】:
Nginx 反向代理无法访问 docker 主机。在亚马逊 (EC2) 上托管 我想加载不同的应用程序取决于位置。
nginx.conf
server {
listen 80 ;
server_name localhost;
location /web {
proxy_pass http://web:4000/;
}}
位置有效,这意味着 nginx 映像构建正确。
码头工人撰写文件
services:
web:
image: web
container_name: web
ports:
- 4000:4000
hostname: web
networks:
- default
nginx:
image: nginx
container_name: nginx
ports:
- 80:80
depends_on:
- web
networks:
- default
networks:
default:
external:
name: my-network
我期待 - 当我输入 url /web 时,它应该显示来自 docker 容器的应用程序
我试过了
Run single container - works fine (web or nginx)
Added 127.0.0.1 web in /etc/hosts (I can do 'curl web' but it shows localhost response)
Added index index.html in location section
Added resolver in the location section
Use links instead of network
当“docker-compose up”时,我可以检查 docker 容器(网络)并查看 IP - 192.168.10.2 。然后curl 192.168.10.2 显示 index.html。但我不能让curl http://web:4000 似乎无法访问主机名,但我认为在 proxy_pass 中使用 IP 是一个糟糕的决定。
【问题讨论】:
-
看this问题/讨论,也许对你有帮助?
-
我会通过删除所有
networks:、hostname:和container_name:块来简化docker-compose.yml;这有什么不同吗?如果my-network网络有另一个名为web的容器没有在端口 4000 上侦听,这可能会导致您看到的问题;来自 nginx 的实际连接错误将有助于进一步诊断。 -
BTW:你不需要发布4000端口。同一网络中的容器总是可以在所有端口上进行内部通信。
标签: docker nginx docker-compose