docker:杀死/停止/重新启动一个容器,参数维护?
我第一次运行一个特定的docker镜像:
docker run [OPTIONS] image [CMD]
我提供的一些选项包括 – --link
(与其他容器链接)和-p
(暴露端口)
我注意到,如果我杀死了那个容器并且简单地执行了docker start <container-id>
,那么Docker会尊重我在run
命令中指定的所有选项,包括链接和端口。
这种行为是否明确logging,我可以总是指望start
命令重新使用run
命令中提供的所有选项的容器?
另外,我注意到杀死/启动一个链接到另一个容器的容器会自动更新上游容器的/etc/hosts
文件:
A--(link)-->B
(A在B的/etc/hosts
有一个入口)
如果我kill
B,B通常会得到一个新的IP地址。 我注意到当我start
B时,A的/etc/hosts
文件中B的入口被自动更新…这非常好。
我在这里 --link
不处理容器重新启动… 最近有这个更新吗? 如果没有,为什么我看到这种行为?
(我使用Docker版本1.7.1,生成786b29d)
是的,事情如你所描述:)
你可以依靠docker start
的行为,因为它并不真正“轮回”你的容器; 它总是在磁盘上,只是在停止状态。 它也将保留对文件的任何更改,但RAM中的更改(例如进程状态)将丢失。 (请注意, kill
不会删除一个容器,它只是用一个SIGKILL
而不是一个SIGTERM
停止它,使用docker rm
来真正移除一个容器)。
当容器由于重新启动而改变IP地址时,现在更新链接。 情况并非如此。 但是,这并不是链接的问题所在 – 他们正在讨论是否可以用一个同名的新容器replace一个容器,并且链接仍然有效。 这是不可能的,但是这种情况将由当前在Docker实验通道中的新的networkingfunction和“服务”对象所覆盖。