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