背景
- 已经建立好了容器,配置了初始端口映射信息
- 但是文件夹映射错了/多了/少了,需要调整
具体方法
方法一
- 将当前容器通过
docker commit
命令生成镜像 - 通过镜像重新建立容器,建立时使用正确的文件夹映射
好处是包治百病,正规途径 缺点就是过程繁琐,不够优雅
方法二
端口映射等容器信息都是存在某个地方,通过配置文件管理的,我们仅需修改配置文件的端口信息即可完成改写
- 以我当前的 nginx 容器为例
查看需要修改的容器信息
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS 070465ca928b nextcloud "/entrypoint.sh apac..." 2 weeks ago Up 6 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp nextcloud
- 当前容器名称 nextcloud,
CONTAINER ID
是070465ca928b
- 没有映射文件夹,现在我要添加一个
/data -> /data
的端口映射
- 停止容器
docker stop nextcloud
- 停止 docker 服务
systemctl stop docker
- 进入文件夹
/var/lib/docker/containers/{CONTAINER ID}
和 CONTAINER ID
容器相关的配置都在其 ID 对应的子目录里
cd /var/lib/docker/containers/070465ca928b...
- 当前目录文件
# ls
5190850b4fcc...-json.log config.v2.json hostname mounts resolv.conf.hash
checkpoints hostconfig.json hosts resolv.conf
我们需要修改的是 hostconfig.json
和 config.v2.json
两个文件
- 修改
hostconfig.json
- 在查看内容时,可以发现 json 中 Binds键值对应的内容即是文件夹映射,将其改为
"Binds":["/data:/data"]
- 修改
config.v2.json
- 同理在 MountPoints 键值下内容:
"MountPoints":{"/data":{"Source":"/data","Destination":"/data","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/data","Target":"/data"},"SkipMountpointCreation":false}
- 开启docker 服务
systemctl start docker
- 运行容器
docker start nginx
- 此时进入容器发现已经成功映射文件夹