链接的docker集装箱不能相互通信

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

应用程序堆栈是:

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

以下是我的docker组成的片段:

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 

我在这里面临的问题是,我的rest服务可以与mongo容器(我的意思是在端口(docker集装箱上的27017)),因为mongo链接到restService。 但用户服务不能谈谈rest服务(我的意思是在港口(docker集装箱5000))。

如果我尝试在主机端口(我的意思是在端口容器的端口5000上监听的端口15000)上使用ui-service对话服务,它就可以工作。 因此,我无法理解为什么会发生这种情况。

任何帮助将不胜感激。

除非你想从这个容器networking外部访问端口,否则删除ports部分。 链接的容器不需要显式地将端口暴露给对方,就像你发现的那样,它暴露给主机。 您需要不公开端口只访问您正在使用的端口,但通过localhost:1234语法(不是container-name:1234 )。

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

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

当你明确地暴露他们,他们暴露在您的本地主机泊坞窗,这就是为什么一些你的东西的作品。