容器

Docker给已经启动的容器添加目录映射、端口映射

方案


  • 容器数据保存在映射目录下,并保留原容器的创建命令
    • a、修改挂载目录只需要将原容器命令添加需要的映射的目录;
    • b、删除需要映射新目录的容器;
    • c、根据更新好的创建容器命令再新建容器即可。
  • 容器容器没有保存在映射目录下,也不清楚原容器的创建命令
    • 参考下面的给启动的容器添加映射目录的方法。

准备


  • 记录下容器的ID(如下图:f4760296bcf1),并停止需要添加映射目录的容器
  • 命令
    • 查看运行的容器:docker ps
    • 查看已映射目录:docker inspect container_name | grep Mounts -A 20
    • 停止运行的容器:docker stop container_name

启动的容器添加映射目录


进入容器工作目录

查看docker的根目录命令:docker info | grep Root

修改容器配置文件

a、进入到容器的目录

  • 命令:cd /var/lib/docker/containers/containers_id

b、修改容器的“config.v2.json”配置文件

  • 在“MountPoints”数组,最后添加宿主机目录“/opt/file”映射到容器的“/file”目录下,如下:
"/file": {
            "Source": "/opt/file",
            "Destination": "/file",
            "Driver": "",
            "Name": "",
            "Propagation": "rprivate",
            "RW": true,
            "Relabel": "ro",
            "SkipMountpointCreation": false,
            "Spec": {
                "Source": "/opt/file",
                "Target": "/file",
                "Type": "bind"
            },
            "Type": "bind"
}

c、修改容器的“hostconfig.json”配置文件

  • 在“Binds”数组,最后添加目录映射配置,如下:
"Binds": [
        "/opt/file:/file"
]

d、重启docker和容器

  • 重启docker服务:systemctl restart docker
  • 重启容器服:docker start containers_id
  • 注意:要重启docker服务,否则修改的配置文件无效,会被还原

启动的容器添加端口映射


方法与“启动的容器添加目录映射”方法相同,进入容器目录修改配置文件。 

  • 命令:docker info | grep Root

进入容器所在目录,修改“hostconfig.json”文件,在“PortBindings”添加端口。

  • 命令:cd /var/lib/docker/containers/container_id
  • 命令:vim hostconfig.json

进入容器所在目录,修改“config.v2.json”文件,在“ExposedPorts”添加端口。

  • 命令:cd /var/lib/docker/containers/container_id
  • 命令:vim config.v2.json

重启docker服务

  • 命令:systemctl restart docker
  • 命令:docker start containers_id
  • 注意:要重启docker服务,否则修改的配置文件无效,会被还原