为什么Docker Mongo在图像构build期间拒绝连接
我正在尝试使用正在运行的mongodb实例创build一个Docker镜像,该实例将包含一些数据。 所以我做这样的Dockerfile
:
FROM mongo:3.4 RUN mongo --eval "printjson(db.serverStatus())"
我马上得到这个错误:
Sending build context to Docker daemon 7.168kB Step 1/3 : FROM mongo:3.4 ---> b39de1d79a53 Step 2/3 : RUN mongo --eval "printjson(db.serverStatus())" ---> Running in 778f00a25623 MongoDB shell version v3.4.7 connecting to: mongodb://127.0.0.1:27017 2017-09-01T13:42:23.128+0000 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused 2017-09-01T13:42:23.128+0000 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed : connect@src/mongo/shell/mongo.js:237:13 @(connect):1:6 exception: connect failed The command '/bin/sh -c mongo --eval "printjson(db.serverStatus())"' returned a non-zero code: 1
也就是说, mongod
守护进程拒绝了我的连接。
他为什么要这样做? 尤其是当我可以从外部自由连接到数据库。
编辑:
我尝试通过用service mongod status
=> mongod:unrecognized service
replaceRUN
命令来查看是否正在运行mongod:unrecognized service
。 所以看起来mongod
服务不是runnig。 自从mongo:3.4
的最后一个声明以来,这是很奇怪的mongo:3.4
我从中得出的结论是:
CMD ["mongod"]
您正在构buildDocker镜像,在构build阶段,mongo服务根本不运行。
构buildDocker镜像只是按顺序执行一系列命令。 没有守护进程监听,所以你的命令不能工作。
您可能想要run
您的映像并在正在运行的container
上执行您的命令,例如:
docker run -d --name=my-name mongo:3.4 docker exec -ti my-name mongo --eval "printjson(db.serverStatus())"
使用这2个命令,首先执行一个mongo容器(通过实例化mongo:3.4映像),然后在运行的容器中执行一个命令。
首先,当你build立图像时,图像中没有任何东西在运行。 进程只在运行映像时运行。
FROM mongo:3.4 RUN mongo --eval "printjson(db.serverStatus())"
每个RUN
语句都在没有其他任何运行的新shell中执行。 所以如果你需要运行一些东西来检查,你需要自己运行它,它只能用于当前的语句
RUN mongod & ; echo "Waiting for mongo to be up"; sleep 20; mongo --eval "printjson(db.serverStatus())"; pkill mongod
这将启动mongo只是RUN
一步,如果你添加另一个声明之后
RUN mongo --eval "printjson(db.serverStatus())"
这是行不通的。 新的shell,从旧的运行语句没有进程。 当前目录重置为任何WORKDIR
运行映像时只能执行命令。 所以你会使用下面的东西
docker run --name mongoserver -d mongo:3.4 docker exec mongoserver mongo --eval "printjson(db.serverStatus())"
第一个命令在后台启动映像,而下一个命令运行一个附加进程。 如果这个过程需要时间来起床,你可能需要在两者之间进行一些睡眠