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

ree*_*h11 6 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:
Run Code Online (Sandbox Code Playgroud)

当我尝试从nginx_web容器ping到web时,它运行正常.但卷曲不起作用.我正进入(状态

curl: (7) Failed to connect to 172.28.0.7 port 8080: Connection refused
Run Code Online (Sandbox Code Playgroud)

当我从主机直接卷曲到9000端口的网络时,它工作正常.

BMi*_*tch 11

在您的 django 应用程序中,将其从侦听 127.0.0.1 更改为侦听 0.0.0.0 的所有接口。Docker 容器拥有自己的网络命名空间,因此您无法访问另一个容器的环回接口。

另外,您的端口不匹配。Django 在 9000 上响应,因此从一个容器到另一个容器,您需要使用端口 9000。到您发布的端口的映射仅发生在 docker 主机上。对于这个用例来说,暴露端口确实没有任何作用。

最后,从您的主机上,您可以反转端口。它是主机上的端口,后面是容器内的端口。所以“8080:9000”。


小智 5

我遇到了同样的问题,当尝试不使用http进行卷发时,我获得了成功。你应该尝试做curl name_of_container:8080/path/to/web/method。这对我有用,因为在docker内部,它不需要SSL。