我遇到一种奇怪的情况,我无法连接到我的docker compose中运行的mongo DB。我的撰写文件:
version: '3'
services:
app:
image: myimage:latest
ports:
- "8080:8080"
external_links:
- myname:mongo
environment:
- MONGO_URL=mongodb://myname:27017/test
我发现了一些信息,但都没有解决我的问题。即我试过了:
1)
创建自定义网络:
docker network create mongonet
然后使用--network mongonet
标志启动mongo并添加到compose:
networks:
default:
external:
name: mongonet
也没有任何东西。
我查看了我的compose上的/ etc / hosts文件,它没有列出任何DNS条目。
如果我做docker inspect
并抓住mongo IP并将其添加到我的作品中,那很好并且就像魅力一样。
我这样开始mongo:
docker run -d -p 27017:27017 -v ~/mongo_data:/data/db mongo
我真的很困惑,因为我相信这是一种开箱即用的东西。奇怪的是,我无法使其发挥作用。我在内部链接上找到了一些例子(vs external_link),但这对我不起作用,因为我有许多服务要运行,而不是所有服务都应该同时运行。
我开始我的码头作品:
docker-compose up --force-recreate
我的版本是:
docker-compose version 1.17.1, build 6d101fb
Docker version 17.05.0-ce, build 89658be
我的问题:如何成功将正在运行的mongo容器作为外部链接链接到我的应用程序容器中,以便它们可以连接到它们?
我的码头PS:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5cf6e08d6fde mongo "docker-entrypoint..." About an hour ago Up About an hour 0.0.0.0:27017->27017/tcp gallant_feynman
答案 0 :(得分:1)
不推荐使用链接,而是使用网络。
注意:
如果您使用的是版本2或更高版本的文件,那么 外部创建的容器必须至少连接到其中一个 与链接到它们的服务相同的网络。链接是一个 遗留选项。我们建议使用网络。
网络方式应该有效。我想你错过了一些作品。确保为mongo容器命名,并确保将应用程序容器附加到compose文件中的网络:
docker network create mongonet
docker run -d -p 27017:27017 --network mongonet --name mongo -v ~/mongo_data:/data/db mongo
version: '3'
services:
app:
image: myimage:latest
ports:
- "8080:8080"
environment:
- MONGO_URL=mongodb://mongo:27017/test
networks:
- mongonet
networks:
default:
external:
name: mongonet