[英]Docker connect to localhost on a another container
我有 2 个容器,一个在localhost:3001上运行,另一个在localhost:3003上运行
容器 localhost:3001 命中在容器 localhost:3003 中运行的端点,但得到一个(失败的)net::ERR_EMPTY_RESPONSE
我尝试了多种方法让他们建立联系。 请不要告诉我设置 docker 撰写文件。 我应该能够启动 2 个容器并让它们与它们的端口通信。
我也尝试添加一个网络。
docker network create my-network
Shows as: ea26d2eaf604 my-network bridge local
然后我使用标志 --net my-network 启动两个容器。 当容器 localhost:3001 再次遇到在容器 localhost:3003 中运行的端点时,我得到一个(失败的)net::ERR_EMPTY_RESPONSE
这真让我抓狂。 我在这里做错了什么?
我什至使用 shell 从 localhost:3001 到 localhost:3003 运行 curl 我得到了
to curl: (7) Failed to connect to localhost port 3003 after 0 ms: Connection refused
当您将两台机器放在同一个网络上时,它们可以通过它们的服务/容器名称相互引用。 (不是 localhost - 因为 localhost 是每个容器上的本地环回)。 使用专用网络将是从容器连接到容器的理想方式。
我怀疑在您的情况下发生的事情是您从主机上的container a
中暴露 3001,从主机上的container b
中暴露 3003。 然后在主机上打开这些端口,您可以从主机使用localhost
,但是,从容器访问主机您应该使用host.docker.internal
这是对主机的引用,而不是使用localhost
这是有关host.docker.internal
的一些进一步阅读。
更新:docker-compose 示例
version: '3.1'
services:
express1:
image: node:latest
networks:
- my-private-network
working_dir: /express
command: node express-entrypoint.js
volumes:
- ./path-to-project1:/express
express2:
image: node:latest
networks:
- my-private-network
working_dir: /express
command: node express-entrypoint.js
volumes:
- ./path-to-project2:/express
networks:
my-private-network:
driver: bridge
ipam:
config:
- subnet: 172.31.27.0/24
然后你可以通过它们的服务名称来引用每个容器,例如:从express1
你可以 ping express2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.