如何给已经运行的容器添加映射路径

类似地,貌似通过修改容器配置文件,可以实现端口映射等其他最初运行容器时未设置的参数。 端口映射的修改请看:如何给已运行容器修改 / 添加端口映射

如果要操作的容器在运行,停掉正在运行的容器

获取容器所使用的镜像ID

1
docker inspect 容器名称|grep Id

镜像ID形如:bde9b0f3a3a40521e60f10dfbce9a15d3ea0d0708ef65c303cea73656fbc5acb

打开已停止容器的配置文件, 配置文件位置:/var/lib/docker/containers/第一步获取到的镜像ID/config.v2.json 旧版本的可能是旧版本的docker可能是config.json.

找到MountPoints区域,未做过路径映射的应该是空的: "MountPoints":{},然后用形如如下格式的内容替换你可以从其他做过路径映射的容器的配置文件中获取你可以从其他做过路径映射的容器的配置文件中获取:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
"MountPoints": {
      "/mnt": {                               # 容器路径
      "Source": "/home/<user-name>",          # 宿主机路径
      "Destination": "/mnt",                  # 容器路径
      "RW": true,
      "Name": "",
      "Driver": "",
      "Type": "bind",
      "Propagation": "rprivate",
      "Spec": {
        "Type": "bind",
        "Source": "/home/<user-name>",        # 宿主机路径
        "Target": "/mnt"                      # 容器路径
      },
      "SkipMountpointCreation": false
    }
  }

重启整个 docker 服务: service docker restart

停掉要操作的容器docker stop 容器名字docker ps -a获取该容器的容器ID

将当前容器提交为新的镜像docker commit 容器ID 指定新的镜像名称(须与原来的不同)

在第二步创建的镜像上重新运行容器(经过实验,原来的映射等参数均丢失,需要全部重新指定)

1
docker run -it -v "$PWD/somedir":/somedir 新容器名称 /bin/bash

原文在此,仅作翻译:https://stackoverflow.com/a/53516263