【故障处理系列--docker卷的挂载】
一位伙伴需求是把容器的目录映射到宿主机且容器目录的内容不被宿主机的空白目录覆盖。我的第一反应是-v 卷的映射,参数是对的,但是用法是错的
1、容器卷的挂载方式
- 容器把目录映射到宿主机
- 创建volume卷,然后把容器的目录和volume卷绑定
区别:方法一宿主机目录会覆盖容器目录的内容,而方法二则不会
2、实现需求
2.1创建volume卷并和宿主机目录绑定
root@jumpserver-work:/app# docker volume create --driver local --opt type=none --opt device=/app --opt o=bind nginx-data
nginx-data
root@jumpserver-work:/app# docker volume ls
DRIVER VOLUME NAME
local c0a415b256bfa82b57e892f4ba2e3588294462951650e37a6cb3a9cc1070f4c2
local nginx-data
2.2把volume卷挂载到容器
root@jumpserver-work:/app# docker run -d --name=nginx-test-volume -v nginx-data:/etc/nginx nginx
d79dd360acab162c6eb071e016e44a68587928a1a3cb919ccb8f8f20361fffef
root@jumpserver-work:/app# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d79dd360acab nginx "/docker-entrypoint.…" 2 seconds ago Up 2 seconds 80/tcp nginx-test-volume
root@jumpserver-work:/app# cd /app/
root@jumpserver-work:/app# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
3、注意
有的服务一些文件是启动才生成的,会产生一种错觉,docker -v映射容器目录到宿主机空目录后,不会覆盖容器目录的内容。直接挂载宿主机的空目录会覆盖容器原来目录的内容