我正在使用docker-compose来运行我的应用程序堆栈。
应用程序堆栈是:
以下是我的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不能谈论休息服务(我的意思是在港口(码头集装箱上的5000))。
如果我尝试与主机端口上的休息服务进行ui-service通话(我的意思是端口15000,它监听docker容器的端口5000),它可以工作。 因此,我无法理解为什么会这样。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
除非您要从此容器网络外部访问端口,否则请删除ports
部分。链接容器不需要相互明确地公开端口,并且正如您所发现的那样,它将它们公开给主机。您需要不公开端口或仅访问您正在使用的端口,而是通过localhost:1234
语法(不是container-name:1234
)。
确保您了解如何引用端口,如果您使用容器名称,则可能需要 link ,但如果您不想这样做,则需要使用localhost和主机端口。
使用链接自动允许链接的容器访问容器的端口。这意味着你的mongodb上的任何端口都可以通过它的容器端口访问,即使它没有暴露。
当您明确公开它们时,它们会暴露给您的本地主机以获取docker,这就是为什么您的某些东西可以工作的原因。