docker:杀死/停止/重新启动一个容器,参数维护?

我第一次运行一个特定的docker镜像:

docker run [OPTIONS] image [CMD]

我提供的一些选项包括 – --link (与其他容器链接)和-p (暴露端口)

我注意到,如果我杀死了那个容器并且简单地执行了docker start <container-id> ,那么Doc​​ker会尊重我在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和“服务”对象所覆盖。