2016-10-14 92 views
1

我对制作和启动容器(create.sh)简单的命令:无法从创建的映像开始 “泊坞窗start” 命令简单泊坞窗容器

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

Dockerfile for CentOS指定外壳为CMD当你开始一个容器来运行:

CMD ["/bin/bash"] 

Docker容器退出时的过程中,他们开始与结束,所以发生了什么当你的容器是start时,它运行bash然后结束,因为没有更多的输入到shell。

使用您的码头工人的形象,这样做你所期望的 - 在echo命令将覆盖Dockerfile的bash命令:

> docker run temp echo 'Test' 
Test 

如果你想保持容器在后台运行,那么你需要过程在容器内部继续运行。当你创建容器可以指定一个命令:从DOC https://docs.docker.com/engine/reference/builder/#/cmd

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

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

检查有关的入口点

的文档
+0

提取物'一个cmd的主要目的是提供默认为正在执行的容器.' – user2915097

+0

from https://docs.docker.com/engine/reference/builder/#/entrypoint'ENTRYPOINT允许您配置一个将作为可执行文件运行的容器。 例如,下面将启动nginx,其默认内容为侦听端口80: docker run -i -t --rm -p 80:80 nginx' – user2915097

+0

嗯,它仍然不清楚。你的意思是这个容器立即停止,因为背景中有任务吗?像nginx,apache等 – Kirby