docker-compose external_link mongo网络无法访问

时间:2017-11-23 11:24:05

标签: mongodb docker docker-compose docker-networking

我遇到一种奇怪的情况,我无法连接到我的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

1 个答案:

答案 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