链接的docker容器可以';我们不能互相交流
我正在使用docker compose运行我的应用程序堆栈 应用程序堆栈是:链接的docker容器可以';我们不能互相交流,docker,docker-compose,linux-containers,Docker,Docker Compose,Linux Containers,我正在使用docker compose运行我的应用程序堆栈 应用程序堆栈是: 蒙戈 休息服务(以下简称休息服务) 用户界面服务(以下简称用户界面服务) 下面是我的docker compose的片段: services: mongodb: image: mongo:3 container_name: mongodb ports: - "17027:27017" rest-service: build: ./rest-service/ c
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容器(我的意思是在port(docker容器上的27017))通信,因为mongo链接到restService。但ui服务不能和rest服务对话(我的意思是在端口上(docker容器上的5000)
如果我试图让ui服务与主机端口上的rest服务对话(我指的是在docker容器的端口5000上侦听的端口15000),它就会工作。
因此,我无法理解为什么会发生这种情况
非常感谢您的帮助。请删除
端口
部分,除非您希望从该容器网络外部访问该端口。链接容器不需要显式地相互公开端口,正如您所发现的,它将端口公开给主机。您需要不公开端口或只访问正在使用的端口,而是通过localhost:1234
语法(而不是container name:1234
)
确保您了解如何引用端口,如果您使用的是容器名称,则可能需要链接,但如果不想这样做,则需要使用localhost和主机端口
使用链接将自动允许链接的容器访问容器的端口。这意味着您的mongodb上的任何端口都可以通过其容器端口访问,即使它没有公开
当您显式地公开它们时,它们将公开给docker的本地主机,这就是为什么您的一些东西可以工作。是
ui服务的/etc/hosts
中的rest
?ui服务
是否能够pingrest
(docker exec-ti ui服务bash->ping rest)?@ThomasMaierrest
不在ui服务
命令的/etc/hosts
中,docker exec-ti ui服务bash->ping rest
没有给我任何信息。当我用命令连接到ui服务时,docker exec-ti ui service bash
,然后在容器上,如果我说,ping rest
,那么我确实得到了正确的响应。这是否意味着我需要在主机的/etc/hosts
上添加rest
。但是,只要看看是否还有其他更好的解决方法?没有必要在主机/etc/hosts
中添加容器的IP,因为您没有在容器中绑定/装载它。当您执行上面的Docker-compose.yml时,Docker应该将容器的动态IP添加到ui服务的/etc/hosts
。你能证实吗?@ThomasMaier它没有补充。在主机的/etc/hosts
文件中手动添加rest
的映射可以解决这个问题。我知道我正在向主机公开容器的端口,但我只是特意做了一些验证。一旦一切正常,我会移除它们。我面临的问题是,rest服务可以和“mongo:27017”对话,但ui服务不能像rest:27017那样和rest服务对话8080@Aditya您是否正在本地主机上运行另一个已经在使用8080的服务?