我有一个正在运行的docker容器,其基本映像为fedora:latest
。
我想保留正在运行的应用程序的状态,但是自从我第一次部署容器以来,仍然更新了一些获得安全修复程序的软件包(即gnutls,openssl和朋友)。
如何在不中断服务或丢失当前状态的情况下实现这一目标?
因此,我希望在正在运行的容器上获得bash
/ csh
/ dash
/ sh
或任何fleet
魔法?
答案 0 :(得分:4)
值得注意的是,您可能会遇到容器关闭的一些问题。
例如,假设您有一个Apache容器的Dockerfile,它在前台运行Apache。想象一下,您将shell附加到容器(通过docker exec
)并开始更新。您必须将修复程序应用于Apache,并在更新过程中重新启动Apache。 Apache关闭的瞬间,容器将停止。您将失去应用程序的当前状态。这将需要非常仔细的计划和一些运气,并且可能无法进行一些更新。
更好的方法是使用所有适当的更新重建容器所基于的映像,然后重新运行容器。服务中断(短暂)。但是,为了能够保存应用程序的状态,您需要设计图像,使得需要保留的任何状态信息以持久的方式存储 - 在主机文件系统中通过挂载目录或数据容器。
简而言之,如果您在集装箱关闭时丢失重要信息,那么您的系统很脆弱。你迟早会遇到问题。最好重新设计它,以便需要持久化的所有东西都保存在外面容器中。
答案 1 :(得分:1)
如果泊坞窗容器有正在运行的bash
docker attach <containerIdOrName>
否则在同一容器中执行新程序(此处:bash
)
docker exec -it <containerIdOrName> bash