为什么我得到一个没有IPAddress的docker容器?

我有一个Dockerfile在Centos 6上构buildmongodb:

 # Build docker image for mongodb FROM test MAINTAINER ... # Set up mongodb yum repo entry # https://www.liquidweb.com/kb/how-to-install-mongodb-on-centos-6/ RUN echo -e "\ [mongodb]\n\ name=MongoDB Repository\n\ baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/\n\ gpgcheck=0\n\ enabled=1\n" >> /etc/yum.repos.d/mongodb.repo # Install mongodb RUN yum install -y mongodb-org # Set up directory requirements RUN mkdir -p /data/db /var/log/mongodb /var/run/mongodb VOLUME ["/data/db", "/var/log/mongodb"] # Expose port 27017 from the container to the host EXPOSE 27017 # Start mongodb ENTRYPOINT ["/usr/bin/mongod"] CMD ["--port", "27017", "--dbpath", "/data/mongodb", "--pidfilepath", "/var/run/mongodb/mongod.pid"] 

我build立它:

 % docker build -t mongodb . ... Step 8 : CMD ["--port", "27017", "--dbpath", "/data/mongodb", "--pidfilepath", "/var/run/mongodb/mongod.pid"] ---> Running in 4025f6c86f81 ---> 46d71068d2e0 Removing intermediate container 4025f6c86f81 Successfully built 46d71068d2e0 

我运行它:

 % docker run -d -P 46d71068d2e0 0bdbfd6fe86ca31c678ba45ac1328958e8126b05c717877287e725924451f7f8 

我检查一下:

 % docker inspect 0bdbfd6fe86ca31c678ba45ac1328958e8126b05c717877287e725924451f7f8 [{ ... "NetworkSettings": { "Bridge": "", "Gateway": "", "IPAddress": "", "IPPrefixLen": 0, "PortMapping": null, "Ports": null }, 

我没有IPAddress。

我的/etc/default/docker里只有DNS选项:

 DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4" 

为什么? 我发现使用这个没有地址是有挑战性的。

如果我用CMD []replaceENTRYPOINTCMD ,我可以运行容器( docker run -t -i mongodb /bin/sh ),它有一个地址,我可以从容器中启动mongod 。 而且它可以作为一个mongodb服务器从外部访问,我可以插入行和查询。

所以答案是mongodb没有启动,因为我已经为数据指定了一条不存在的path:

  "--dbpath", "/data/mongodb" 

当我之前创build完全不同的目录时:

 RUN mkdir -p /data/db /var/log/mongodb /var/run/mongodb VOLUME ["/data/db", "/var/log/mongodb"] 

当用docker run -P -d启动时,没有输出。 我试图docker run -t -i这个容器在terminal看到的结果,但我得到这个错误 :

CMD = / bin / sh当使用ENTRYPOINT但空的CMD

“在没有CMD的情况下使用入口点时,CMD被设置为/ bin / sh,而不是预期的没有。