docker工人将其所有文件存储为“内存镜像”,作为镜像的一部分,而不是磁盘文件?

我试图添加一些文件,如“触摸”泊坞窗容器。 我发现closures这个容器后,又重新启动,所有的文件都丢失了。 此外,我正在使用Ubuntu的图像,关机后重新启动相同的图像,所有我的软件已经安装了apt-get消失了! 就像运行一个新的形象。 那么如何保存我创build的文件?

我的问题是,docker“存储”所有的文件系统,如“/ tmp”作为内存文件系统,所以没有任何事情实际上保存到磁盘?

谢谢。

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

例如,一个简单的Apache Web服务器:

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

这会将你的“当前”导向器挂载到容器中的/ usr / local / apache2 / htdocs,这样这些文件就可以在这里使用。

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

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

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

  1. 使用卷。 数据卷旨在持久化数据,与容器的生命周期无关。 您可以附加数据卷或将主机目录挂载为卷。
  2. 使用Docker提交来创build一个包含更改的新映像,并根据该映像启动将来的容器。

    docker commit <container-id> new_image_name docker run new_image_name

  3. 使用docker ps -a列出所有的容器。 它将列出所有的容器,包括已经退出的容器。 find您正在使用的容器的docker标识,并使用docker start <id>启动它。

    docker ps -a #find the id docker start 1aef34df8ddf #start the container in background

参考

  1. Docker卷
  2. docker提交