请教一个 dokcer 数据卷的问题

2019-11-15 11:34:00 +08:00
 tw1992

最近在学 docker,正常将宿主机内目录挂载到容器前,事先把需要挂载目录内的文件创建好,比如 nginx.cnf ,或者先把容器跑起来,doker cp 到宿主机后再挂载到容器。 但是昨天 pull 一个禅道( zentao )的镜像,执行

docker run -d -p 80:80 -p 3306:3306 -e USER="root" -e PASSWD="password" -e BIND_ADDRESS="false" -v /docker/zbox/:/opt/zbox/ --name zentao idoop/zentao:9.8.3

发现容器内 /opt/zbox/下所有的文件和目录都挂载到了宿主机 /docker/zbox/,请教一下大佬们这是这么实现的。

[root@gcjy-dev zbox]# cd /docker/zbox/

[root@gcjy-dev zbox]#

[root@gcjy-dev zbox]#

[root@gcjy-dev zbox]# ll

总用量 16

drwxr-xr-x. 7 1000 1000 82 4 月 8 2018 app

drwxr-xr-x. 2 1000 1000 37 4 月 8 2018 auth

drwxr-xr-x. 2 1000 1000 132 6 月 27 2017 bin

drwxr-xr-x. 3 1000 1000 19 4 月 28 2017 data

drwxr-xr-x. 5 1000 1000 44 4 月 28 2017 etc

drwxrwxrwx. 2 1000 1000 78 4 月 8 2018 logs

-rw-r--r--. 1 1000 1000 281 4 月 28 2017 README

drwxr-xr-x. 6 1000 1000 55 4 月 28 2017 run

drwxrwxrwx. 5 1000 1000 44 4 月 28 2017 tmp

-rwxr-xr-x. 1 1000 1000 90 8 月 21 2017 zbox

-rwxr-xr-x. 1 1000 1000 6564 3 月 26 2018 zbox.php

5140 次点击
所在节点    Docker
10 条回复
anubu
2019-11-15 12:03:39 +08:00
容器启动后,容器内程序会释放文件到 /opt/zbox/。
FireFoxAhri
2019-11-15 12:56:29 +08:00
我发现 postgres 的镜像也是这样,挺方便的
tw1992
2019-11-15 14:07:46 +08:00
@FireFoxAhri 确实非常方便
fishofcat
2019-11-15 14:11:36 +08:00
这个也是你说的先挂载了,只是文件是后来生成进去的。
ysoserious
2019-11-15 14:12:28 +08:00
一些镜像在启动的时候会判断数据文件目录是否为空, 如果是空的, 就认为还没有初始化, 于是执行初始化程序并创建相应的文件.

如果判断数据文件目录不是空的, 就认为已经初始化过了, 就不再初始化.

所以你第一次启动的时候挂载了个空的目录进去, 程序判断还没有初始化, 就初始化了.
tw1992
2019-11-15 14:58:45 +08:00
@ysoserious 看了 dockerfile,也没看出来
AstroProfundis
2019-11-15 15:07:26 +08:00
不一定是 dockerfile 里面,你看他程序怎么启动的,可能在启动脚本里面,甚至是那个进程自己干的
ysoserious
2019-11-15 15:18:54 +08:00
@tw1992 #6

dockerfile 最后一句是
```
ENTRYPOINT ["docker-entrypoint"]
```
意思是在容器启动的时候, 在容器中执行 docker-entrypoint 这个脚本, 你可以在 dockerfile 所在目录下找到这个脚本

这个脚本的 11 行~15 行: 如果 /opt/zbox 或者 /opt/zbox/app 目录为空, 执行初始化操作, 把 /tmp/zbox.tar.gz 解压到 /opt 目录下. 于是就有了 /opt/zbox 里的文件
tw1992
2019-11-15 15:45:58 +08:00
@ysoserious 非常感谢
hmxxmh
2019-12-23 23:29:35 +08:00
因为你用了–v, 如果是–mount 宿主机目录不存在就不会自动创建

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/619825

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX