我有一个docker swarm服务,它使用mongodb,mongo-express和一个自定义的节点图像。我已经创建了一个简单的docker yaml文件来一起启动它们。
version: '3.1'
services:
mongo:
image: mongo:4.0.6-xenial
environment:
MONGO_INITDB_ROOT_USERNAME:
MONGO_INITDB_ROOT_PASSWORD:
mongo-express:
image: mongo-express
environment:
MONGO_INITDB_ROOT_USERNAME:
MONGO_INITDB_ROOT_PASSWORD:
ports:
- "8081:8081"
backend:
image: backend
ports:
- "2222:2222"现在我知道docker swarm会自动在所有节点之间创建一个默认的覆盖网络。我的docker inspect网络显示了网络中的所有容器。我可以看到使用localhost:2222和mongo-express使用localhost:8081连接的后端。
我的问题是后端没有连接,它甚至看不到mongo数据库。我尝试ssh进入mongo-express容器,pinged localhost:27017成功,然后pinged localhost:2222成功。
然而,试图从后端容器ping/curl mongo-express或mongodb却什么也看不到,就像端口甚至看不见一样。(localhost:2222可以工作,但localhost:8081或localhost:27017不行)。
编辑:在从docker inspect network复制mongo的ip地址后,我再次ssh到后端容器中,然后我们能够成功地curl 10.0.5.8:27017。为什么它不在本地主机上?
发布于 2019-03-06 18:47:27
每个容器都有自己的IP地址。这意味着在docker容器中,localhost引用自身。这就是为什么您不能期望使用localhost从mongo-express容器到达mongo容器的IP地址。
Docker compose和swarm为我们提供了一种方便的方法,可以通过docker-compose.yml文件中定义的服务名称来寻址容器。
因此,在mongo-express容器中,使用mongo:27017连接到mongo。
https://stackoverflow.com/questions/55018632
复制相似问题