无法从一个容器卷曲到另一个容器

时间:2017-07-28 08:24:06

标签: curl docker docker-compose

我在一个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端口的网络时,它工作正常。

2 个答案:

答案 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"。

相关问题