Docker全系列 - Docker如何给容器新增、修改映射目录

1,285 阅读2分钟

Docker如何给容器新增、修改映射目录

方案一:修改配置文件

[root@localhost ~] docker stop [容器ID]

[root@localhost ~] docker inspect [容器名称] | grep Id

[root@localhost ~] vim /var/lib/docker/containers/[容器ID]/hostconfig.json
# 在Binds标签下按照原有的格式新增需要映射的目录,如果需要修改原来映射的目录把参数里原来的内容换掉即可
"Binds":["[宿主机目录-1]:[需要映射到容器的哪个目录-1]", "[宿主机目录-2]:[需要映射到容器的哪个目录-2]"]
    
[root@localhost ~] vim /var/lib/docker/containers/[容器ID]/config.v2.json
# 在MountPoints标签下按照原有的格式新增需要映射的目录,如果需要修改原来映射的目录把参数里原来的内容换掉即可
"MountPoints":{"[需要映射到容器的哪个目录-1]":{"Source":"[宿主机目录-1]","Destination":"[需要映射到容器的哪个目录-1]","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"[宿主机目录-1]","Target":"[需要映射到容器的哪个目录-1]"},"SkipMountpointCreation":false}, "[需要映射到容器的哪个目录-2]": {"Source":"[宿主机目录-2]","Destination":"[需要映射到容器的哪个目录-2]","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"[宿主机目录-2]","Target":"[需要映射到容器的哪个目录-2]"},"SkipMountpointCreation":false}}

[root@localhost ~] systemctl restart docker

[root@localhost ~] docker start [容器ID]

总结:
    
    优点:不会对容器产生副作用
    缺点:需要重启docker,这对于在生产环境来说也许是不可接受的

方案二:重命名容器

[root@localhost ~] docker run -d -p xxx -v xxx xxxxx --name xx1 .....
# 建立一个新的容器

[root@localhost ~] docker rm -f [原来的容器]
[root@localhost ~] docker rename xx1 [原来的容器名称]

总结:
    
    优点:不用重启docker,不会影响到其他容器的运行,影响相对较小
    缺点:不适合所有的容器,有的镜像新建了容器可能需要初始化一些文件到映射的目录里,这样会替换掉原来容器产生的数据造成生产事故,!!!所以谨慎使用!!!