docker是否将其所有文件存储为"内存映像",作为映像的一部分,而不是磁盘文件?

时间:2017-03-18 02:55:21

标签: image file docker save

我试图在Docker容器中添加一些文件,例如" touch"。我在关闭此容器后发现,再次启动它,我的所有文件都丢失了。另外,我使用ubuntu映像,关机后重新启动相同的映像,apt-get安装的所有软件都不见了!就像运行新图像一样。那么如何保存我创建的任何文件呢?

我的问题是,docker" store"它的所有文件系统如" / tmp"作为内存文件系统,实际上什么都没有保存到磁盘?

感谢。

2 个答案:

答案 0 :(得分:1)

这是docker的正常行为。您必须定义一个卷来保存数据,即使关闭容器,这些卷也会存在。

例如,使用简单的apache webserver:

$ docker run -dit --name my-apache-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4

这将使您的"当前"导演到容器上的/ usr / local / apache2 / htdocs,所以这些文件将在那里可用。

另一种方法是使用命名卷,这些卷不链接到磁盘上的目录。请参阅文档: Docker Manage - Data

答案 1 :(得分:0)

使用docker run命令fetch_assoc()启动容器时,docker会根据您指定的图像启动 new 容器。您对前一个容器所做的任何更改都将不可用,因为这是从基本映像生成的新实例。

有多种方法可以将数据/更改保存到容器中。

  1. 使用卷。 数据卷旨在持久保存数据,与容器的生命周期无关。您可以附加数据卷或将主机目录作为卷安装。
  2. 使用Docker commit创建包含更改的新图像,并根据该图像启动未来的容器。

    docker run ubuntu

  3. 使用docker commit <container-id> new_image_name docker run new_image_name列出所有容器。它将列出所有容器,包括已退出的容器。找到您正在处理的容器的docker id,并使用docker ps -a启动它。

    docker start <id>

  4. 参考

    1. Docker Volumes
    2. Docker Commit