繁体   English   中英

Docker 连接到另一个容器上的本地主机

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM