无法从创build的映像中使用“docker start”命令启动简单的docker容器

我有简单的命令来创build和启动容器(create.sh):

docker build -t foo . docker rm bar docker create --name=bar foo && \ docker start bar && \ docker exec bar sh /bin/echo Test!!! 

Dockerfile:

 #/bin/bash FROM centos:7 RUN yum update -y 

但是它不能开始:

 $ bash create.sh Sending build context to Docker daemon 4.608 kB Step 1 : FROM centos:7 ---> 980e0e4c79ec Step 2 : RUN yum update -y ---> Using cache ---> 80b94205920c Successfully built 80b94205920c bar a1db507225ca7479bdcc3bb3d4e3a86339827f4bf0e9365f507978b11d99df19 bar Error response from daemon: Container bar is not running 

该容器已创build,但尚未启动。

CentOS的Dockerfile将shell指定为在启动容器时运行的CMD

 CMD ["/bin/bash"] 

当他们开始的进程结束时,Docker容器退出,所以当你start你的容器时,它会运行bash ,然后结束,因为没有更多的input到shell。

使用你的Docker镜像,这是你所期望的 – echo命令覆盖了Dockerfile中的bash命令:

 > docker run temp echo 'Test' Test 

如果你想保持一个容器在后台运行,那么你需要容器​​内的进程继续运行。 您可以在创build容器时指定一个命令:

  >docker create temp sleep infinity a34a4528b3cfbb7a36fb429d32510c5576831adeb899c07e4596a6b9731c945b > docker start a34 a34 > docker exec a34 echo 'Test' Test 

您的Dockerfile没有ENTRYPOINT或CMD,所以它立即结束,这是正常的。

检查有关进入点的文档