gpt4 book ai didi

docker - 链接的 docker 容器无法相互通信

转载 作者:行者123 更新时间:2023-12-02 03:11:50 28 4
gpt4 key购买 nike

我正在使用 docker-compose 来运行我的应用程序堆栈。

应用程序堆栈是:

  1. 蒙古
  2. Rest Service(以下简称rest-service)
  3. UI服务(以下简称ui-service)

下面是我的 docker-compose 的片段:

services:
mongodb:
image: mongo:3
container_name: mongodb
ports:
- "17027:27017"

rest-service:
build: ./rest-service/
container_name: rest
ports:
- "15000:5000"
command: "/opt/app/conf/config.yml"
links:
- mongodb:mongo

ui-service:
build: ./ui-service/
container_name: ui
ports:
- "18080:8080"
links:
- rest-service:rest
environment:
NODE_ENV: development

我在这里面临的问题是我的休息服务可以与 mongo 容器通信(我的意思是在端口(docker 容器上的 27017)上),因为 mongo 链接到 restService。但是 ui-service 无法与 rest-service 通信(我的意思是在端口(docker 容器上的 5000)上)。

如果我尝试让 ui-service 与主机端口上的 rest-service 通信(我的意思是监听 docker 容器的端口 5000 的端口 15000),它会起作用。因此,我无法理解为什么会这样。

如有任何帮助,我们将不胜感激。

最佳答案

删除 ports 部分,除非你想从这个容器网络外部访问端口。链接的容器不需要显式地相互公开端口,正如您所发现的,它会将它们公开给主机。您需要不公开端口只访问您正在使用的端口,而是通过localhost:1234 语法(不是container-name:1234).

确保您了解如何引用端口,如果您使用容器名称,您可能需要链接,但如果您不想这样做,则需要使用 localhost 和主机端口。

使用链接自动允许链接的容器访问容器的端口。这意味着您的 mongodb 上的任何端口都可以通过它的容器端口访问,即使它没有暴露。

当您显式公开它们时,它们会公开给您的 docker 本地主机,这就是为什么您的一些东西可以工作的原因。

关于docker - 链接的 docker 容器无法相互通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39600562/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com