链接

时间:2015-06-30 12:51:50

标签: mongodb docker

我正在尝试运行一个在主机上拥有它的数据库的mongodb映像。然后将该容器链接到运行nodejs应用程序的容器。

mongodb容器以下列方式启动:

    docker run -d \
     -v $(pwd)/../mongodb/log:/var/log/mongodb/ \
     -v $(pwd)/../mongodb/db:/data/db \
     -v $(pwd)/../mongodb/mongod.conf:/etc/mongod.conf \
     --name mongodb \
     mongodb:dev mongod

然后以:

启动节点应用程序映像
    docker run -it --rm \
     -v $(pwd)/app:/app \
     -w /app \
     -p 80:80 \
     -e "MONGODB_HOST=mongodb" \
     --link mongodb:mongodb \
     --name app \
     node:dev bash

我得到一个命令行,可以启动应用程序。有趣的是,我的mongodb是空的。当我没有链接mongodb容器时,数据库不为空。好像链接时monted卷无法正常工作。

以下作品:

    docker run -d \
     -v $(pwd)/../mongodb/log:/var/log/mongodb/ \
     -v $(pwd)/../mongodb/db:/data/db \
     -v $(pwd)/../mongodb/mongod.conf:/etc/mongod.conf \
     -p 27017:27017 \
     --name mongodb \
     mongodb:dev mongod

    docker run -it --rm \
     -v $(pwd)/app:/app \
     -w /app \
     -p 80:80 \
     -e "MONGODB_HOST=172.17.42.1" \
     --name app \
     node:dev bash

将mongodb链接到应用程序是否会破坏已安装的卷?当没有连接容器时,一切似乎工作正常。

版本是:

    Docker version 1.5.0, build a8a31ef/1.5.0

[UPDATE] 我可以确认,当删除--link mongodb:mongodb我的数据库不为空。将此添加到应用程序将以某种方式破坏mongodb的音量。

当容器用作链接但无法在文档中找到任何内容时,db volume或mongod.conf可能会搞乱。

唯一需要此音量的容器是mongodb,因此我不需要创建data volume container,但会在我有更多时间时尝试。

1 个答案:

答案 0 :(得分:0)

Docker没有错。

因为链接会将MONGODB_PORT环境变量设置为tcp://172.17.0.9:27017,并且在启动应用程序容器时我不会覆盖它,我得到错误的连接字符串。

而不是:

mongodb://mongodb:27017/app

我明白了:

mongodb://mongodb:tcp://172.17.0.9:27017/app

使用:-e "MONGODB_PORT=27017"启动应用容器解决了这个问题。

这可能不是一个非常常见的问题,但是链接会设置环境变量,所以如果您的应用依赖于这些变量,您应该检查它们是否通过链接到无用的东西来设置。