无法从创建的映像启动带有“docker start”命令的简单docker容器

时间:2016-10-14 11:12:41

标签: docker dockerfile

我有制作和启动容器(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

容器已创建,但尚未启动。

2 个答案:

答案 0 :(得分:4)

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

查看有关ENTRYPOINT的文档

答案 1 :(得分:2)

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

CMD ["/bin/bash"]

Docker容器在他们开始的流程完成后退出,所以当你start你的容器,它运行bash然后结束时,会发生什么,因为那里没有更多的shell输入。

使用您的Docker镜像,这可以达到预期效果 - echo命令覆盖Dockerfile中的bash命令:

> docker run temp echo 'Test'
Test 

如果要保持容器在后台运行,则需要容器内的进程继续运行。您可以在创建容器时指定命令:

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