更新正在运行的Docker容器

我有一个运行docker容器与基本形象的fedora:latest

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

我怎么能做到这一点,而不中断服务或失去目前的状态?

所以最好我想在运行的容器上得到一个bash / csh / dash / sh ,或者任何fleet魔法?

请注意,您可能会遇到closures容器的一些问题。

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

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

简而言之,如果您的容器closures时您将丢失重要的信息,那么您的系统很脆弱,您迟早会遇到问题。 最好重新devise它,以便将需要持久化的所有内容都保存在容器外部

如果docker容器有一个正在运行的bash

 docker attach <containerIdOrName> 

否则在同一个容器中执行一个新的程序(这里是: bash

 docker exec -it <containerIdOrName> bash