2016-10-14 109 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