无法从一个容器curl到另一个容器

我有一个docker-compose.yml中的两个容器。 两者在同一networking上都是一样的。 我已经使用“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容器到networking,它工作正常。 但curl不起作用。 我正进入(状态

 curl: (7) Failed to connect to 172.28.0.7 port 8080: Connection refused 

而当我从主机直接卷到web端口9000时,它工作正常。

在您的Django应用程序中,将其从127.0.0.1上的侦听中更改为使用0.0.0.0侦听所有接口。 Docker容器有自己的networking名称空间,所以你不能访问另一个容器的loopback接口。

另外,你的端口不匹配。 Django正在响应9000,因此从容器到容器,您需要使用端口9000.映射到发布的端口只发生在docker主机上。 暴露一个端口真的不会为这个用例做任何事情。

最后,从你的主机,你有端口倒过来。 它是主机上的端口,接着是容器内的端口。 所以“8080:9000”。

我有同样的问题,当我试图使curl没有http时,我已经成功了。 你应该尝试curl name_of_container:8080/path/to/web/method 。 这对我工作,因为在docker组成,它不需要SSL。