我在一个docker-compose.yml中有两个容器。两者在同一网络上都是相同的。我已经使用“depends_on”添加了依赖项,我能够ping另一个容器,但curl无效。
version: "2.1"
services:
web:
restart: always
build:
context: .
dockerfile: web.dockerfile
ports:
- "9000:8080"
expose:
- "8080"
networks:
- test
nginx_web:
restart: always
build:
context: .
dockerfile: nginx_web.dockerfile
ports:
- "8100:80"
expose:
- "80"
depends_on:
- web
networks:
- test
networks:
test:
当我尝试从nginx_web容器ping到web时,它运行正常。但卷曲不起作用。我正在
curl: (7) Failed to connect to 172.28.0.7 port 8080: Connection refused
当我从主机直接卷曲到9000端口的网络时,它工作正常。
答案 0 :(得分:5)
我遇到了同样的问题,当我尝试使用没有http的卷曲时,我取得了成功。你应该尝试curl name_of_container:8080/path/to/web/method
。这对我有用,因为在docker compose中,它不需要SSL。
答案 1 :(得分:2)
在你的django应用程序中,将其从侦听127.0.0.1更改为使用0.0.0.0监听所有接口。 Docker容器获得自己的网络命名空间,因此您无法访问另一个容器的环回接口。
此外,您的端口不匹配。 Django正在响应9000,所以从容器到容器,你需要使用端口9000.映射到你发布的端口只发生在docker主机上。暴露一个端口对这个用例确实没有任何作用。
最后,从您的主机,您的端口已反转。它是主机上的端口,后跟容器内的端口。所以" 8080:9000"。