更新正在运行的docker容器

时间:2015-01-05 10:13:37

标签: docker containers linux-containers

我有一个正在运行的docker容器,其基本映像为fedora:latest

我想保留正在运行的应用程序的状态,但是自从我第一次部署容器以来,仍然更新了一些获得安全修复程序的软件包(即gnutls,openssl和朋友)。

如何在不中断服务或丢失当前状态的情况下实现这一目标?

因此,我希望在正在运行的容器上获得bash / csh / dash / sh或任何fleet魔法?

2 个答案:

答案 0 :(得分:4)

值得注意的是,您可能会遇到容器关闭的一些问题。

例如,假设您有一个Apache容器的Dockerfile,它在前台运行Apache。想象一下,您将shell附加到容器(通过docker exec)并开始更新。您必须将修复程序应用于Apache,并在更新过程中重新启动Apache。 Apache关闭的瞬间,容器将停止。您将失去应用程序的当前状态。这将需要非常仔细的计划和一些运气,并且可能无法进行一些更新。

更好的方法是使用所有适当的更新重建容器所基于的映像,然后重新运行容器。服务中断(短暂)。但是,为了能够保存应用程序的状态,您需要设计图像,使得需要保留的任何状态信息以持久的方式存储 - 在主机文件系统中通过挂载目录或数据容器。

简而言之,如果您在集装箱关闭时丢失重要信息,那么您的系统很脆弱。你迟早会遇到问题。最好重新设计它,以便需要持久化的所有东西都保存在外面容器中。

答案 1 :(得分:1)

如果泊坞窗容器有正在运行的bash

docker attach <containerIdOrName>

否则在同一容器中执行新程序(此处:bash

docker exec -it <containerIdOrName> bash