未绑定的docker容器卷中的数据是否已提交给映像?

时间:2015-05-15 18:17:01

标签: postgresql docker

例如,postgres图片在/var/lib/postgresl/data处有一个卷,但它并未绑定到特定的主机路径。我想知道在这个容器中完成的数据库工作是通过将容器提交到映像完全封装的,还是我需要单独传递未绑定卷的内容。

命令中的示例

根据vtest图片创建容器postgres

$ docker run -d --name vtest postgres

容器的主机路径为/var/lib/postgresql/data that is not bound

$ docker inspect -f '{{ .Volumes }}' vtest
map[/var/lib/postgresql/data:/var/lib/docker/vfs/dir/bc39da05ff1cd044d7a17bba61381e854a948fb70cf39f897247f5ada66ad906]
$ sudo docker inspect -f '{{ .HostConfig.Binds }}' vtest
<no value>

创建数据库并在vtest容器中添加一些记录。然后,将更改提交到图像以便能够与他人共享:

$ docker commit -p vtest postgres:vtest

vtest容器/var/lib/postgresql/data中所做的更改是否会保留在这个新的postgres:vtest图片中?

1 个答案:

答案 0 :(得分:3)

安装在容器中的卷未提交给映像,无论它是挂载到主机的特定文件夹还是挂载到perl program.pl < input.txt中的文件夹。实际上,正如您在消息中显示的那样,卷已安装到主机中的/var/lib/docker。您可以以root用户身份浏览该文件夹。

如果要将数据保存在卷中,则需要使用与提交不同的其他方法。其中一个比较常用的是使用数据容器(它会在/var/lib/docker/vfs/dir/bc39da05ff1cd044d7a17bba61381e854a948fb70cf39f897247f5ada66ad906中创建一个包含数据的文件夹),然后使用新容器和/var/lib/container/...等打包工具保存该卷。查看Docker documentation related to this topic了解更多详情。