我正在尝试运行一个在主机上拥有它的数据库的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,但会在我有更多时间时尝试。
答案 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"
启动应用容器解决了这个问题。
这可能不是一个非常常见的问题,但是链接会设置环境变量,所以如果您的应用依赖于这些变量,您应该检查它们是否通过链接到无用的东西来设置。