重新执行已退出的 docker 会话

重新执行已退出的 docker 会话

我已经下载了 docker 镜像并使用-it参数以交互方式运行它。但是缺少一些应用程序,我通过 安装它们apt-get。问题是每次我退出会话时,我安装的所有内容都会被删除,下次我必须重新安装。我想也许使用选项在已挂载目录中安装应用程序可能会起作用,但由于该目录中已经有一些其他应用程序,所以我认为这可能不是理想的解决方案。有没有一种标准的方法来保存当前会话,也就是说保存我已安装的应用程序。那么对和和类似文件-v的更改呢?有没有一种优雅的方法来保存它们? .bashrc.bash_profile

更新:

这是我想要重新运行的会话及其容器 ID。有没有办法使用容器 ID 再次以交互方式运行它?

CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                       PORTS               NAMES
50e77c283ae9        shogun/shogun-dev         "bash"              24 hours ago        Exited (1) 4 hours ago                           dreamy_fermi

答案1

从你的问题中我看到你有两种方法可以解决这个问题:

  • 从容器生成 Docker 镜像,其中包含您需要持久化的所有软件包和配置。这样,您无需在每次创建新容器时都安装软件包并进行配置
  • 使用您需要安装的所有软件包从 Dockerfile 创建自定义 docker 镜像。运行容器时,您可以使用 映射自定义文件和持久数据存储-v volume

让我们举一个例子来更清楚地说明这一点。

# docker run -it --name test_con ubuntu:16.04 /bin/bash

我将安装一些软件包,即 vim、bash-completion 和 wget。

root@9c67dc1776cd:/# apt-get update
root@9c67dc1776cd:/# apt-get install vim bash-completion wget

然后从这个容器创建一个新的docker镜像,我将其命名为test_con。为此,我们将使用命令选项commit。

# docker commit -m "updated packages" test_con ubuntu:v1

如果命令执行成功,您应该得到类似这样的输出。

sha256:cdf9dc8fe82407b49bae2a2840e7f59706ac84e9f6a0fff55a62afc7dd0db3c3

使用此命令确认是否确实创建了新容器:

# docker images

从中创建测试容器并检查 wget 是否存在。

# docker run --name test --rm -it ubuntu:v1
root@401345aecec5:/# which wget
/usr/bin/wget

对于第二种选择,你可以看看这个维基页面在 docker 命令上。这将帮助您在初始创建时自定义镜像。

答案2

Docker 的重点在于它不会改变。如果你想改变它,更新 Docker 映像

相关内容