curl localhost从一个docker容器连接到另一个docker容器
我有以下curl localhost从一个docker容器连接到另一个docker容器,docker,curl,Docker,Curl,我有以下docker compose并在本地运行: version: '3.4' services: testservice.api: image: testservice.api build: context: . dockerfile: Services/.../Dockerfile ports: - "5101:80" sql.data: image: postgres.jchem build:
docker compose
并在本地运行:
version: '3.4'
services:
testservice.api:
image: testservice.api
build:
context: .
dockerfile: Services/.../Dockerfile
ports:
- "5101:80"
sql.data:
image: postgres.jchem
build:
context: ../db/postgres
dockerfile: Dockerfile
ports:
- "5432:5432"
- "9090:9090"
现在,在sql.data
容器中,我尝试执行curlhttp://localhost:5101/...
但我得到退出代码(7)连接失败
当我尝试通过
curl连接时http://testservice.api/...
它可以工作。为什么我不能连接到
localhost:port
?我如何通过curl localhost:port
实现从docker容器内连接到另一个容器?当您在容器内说localhost时,它将读取为容器本身。使容器能够与其他容器通信。您需要确保这些容器连接在同一网络上,然后您可以尝试通过它们的DNS(服务名称)或容器IP访问它们
为什么我不能连接localhost:port
这是因为每个容器都有自己的网络接口,因此有自己的“localhost”
如何使用curl localhost:port实现从docker容器到另一个容器的连接
您可以在每个compose服务中使用
网络模式:“主机”
,以便每个容器使用相同的主机网络接口。不过,我建议您调整应用程序,使其可配置,以便将其服务依赖项URL作为参数获取(例如)。当您“在”容器中时,localhost指的是容器本身,不是主机。我想从docker版本3开始,所有容器都自动运行在同一个网络中?同一个网络与共享同一个网络地址不同,每个容器在虚拟网络中都接收自己的IP地址。我如何才能访问另一个容器中的容器,该容器的地址与我从主机使用的地址相同(在本例中为localhost:5101)?如何使容器将localhost:5101转换为testservice.api?在容器中,查看/etc/hosts
,假设它是一个Linux容器,这可能会添加一些额外的上下文