例如,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
图片中?
答案 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了解更多详情。