【发布时间】:2019-07-27 20:30:31
【问题描述】:
我有一个使用 mongodb、mongo-express 和自定义节点映像的 docker swarm 服务。我创建了一个简单的 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 连接的后端和使用 localhost:8081 连接的 mongo-express。
我的问题是后端没有连接,也看不到 mongo 数据库。 我尝试 ssh-ing 到 mongo-express 容器,ping localhost:27017 成功,然后 ping localhost:2222 成功。
但是,尝试从后端容器 ping/curl mongo-express 或 mongodb 没有任何作用,就像端口甚至不可见一样。 (localhost:2222 有效,但 localhost:8081 或 localhost:27017 无效)。
编辑:从 docker 检查网络复制 mongo 的 IP 地址后,我再次 ssh 进入后端容器,然后能够成功 curl 10.0.5.8:27017。 为什么不在本地主机上?
【问题讨论】:
标签: node.js mongodb docker docker-swarm docker-networking