我有制作和启动容器(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
容器已创建,但尚未启动。
答案 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