【发布时间】:2021-06-15 07:11:13
【问题描述】:
我正在尝试从一个容器向同一主机上的另一个容器发出请求。事实证明,请求被拒绝,我无法获得我想要的信息。为了说明,我做了一个小图:
在“机器 1”上,我有 2 个服务在 docker-compose 上运行:App1 有 2 个服务,需要向 App2 发出请求。 App2 是接收请求的服务,只有 1 个服务,监听 4202 端口。
docker-compose.yaml 为 app1
version: '3.9'
services:
main_app:
build: .
depends_on:
- db_app
db_app:
restart: always
image: redis
docker-compose.yaml 为 app2
version: '3.9'
services:
main_app:
build: .
ports:
- "4202:5000"
连接不工作。这很奇怪,因为其他连接工作,例如:
在此图像中,在另一台机器 machine 2 上,我使用 curl 尝试访问在机器 1 内运行的容器。在端口 4202 上,我请求位于内部的域 name.domain.example网络,它由内部 DNS 解析,之后,它确实成功地请求了机器 1 上的容器。
在另一种情况下,我在机器 2 内创建一个容器,并使用 curl 向 name.domain.example 发出请求,结果相同:成功。我可以到达机器 1 内的容器。
在这里,我在机器 1(运行将被请求的服务的同一台机器)上使用 curl。向 name.domain.example 发出请求,并成功到达服务。
在这种情况下,这是请求失败的地方。这一次,我尝试从 app1 容器内发出请求,请求是向 name.domain.example 发出的,DNS 能够解析它,但是当发出请求时,它最终被拒绝了。
在 app1 中,我尝试通过 python 发出请求,来自 requests 库:
import requests
r = requests.get("name.domain.example:4202")
# But, Exception...:
requests.exceptions.ConnectionError: HTTPConnectionPool(host='name.domain.example', port=4202): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f74fbcb1100>: Failed to establish a new connection: [Errno 111] Connection refused'))
我尝试将 app1 放在网络“主机”--network=host 或 docker-composenetwork_mode="host" 上,我可以到达 app2 的容器。但是,这对我的情况没有用处,因为我需要来自 compose 堆栈的其他服务,此外,随着服务的增加和更多地相互依赖,这最终会变成蜘蛛网。
【问题讨论】:
-
这些图片非常漂亮,但我们真正需要看到的是您的代码——例如您的
docker-compose.yml、您提出的确切请求等:-)。或者至少是最小的相关部分。 -
@Don'tPanic 我将编辑问题并显示更多代码。等一下。
标签: docker docker-compose microservices docker-network