对“已添加/运行的 container” 进行挂载数据卷,修改映射端口操作

  1. 方式一:停止container,docker服务修改配置后重启

    • 停止要修改配置的容器(若已启动的话) docker stop container_id|container_name

    • 停止docker 服务 systemctl stop docker

    • 修改/var/lib/docker/containers/container_hash_num 目录下的config.v2.json 与 hostconfig.json 两个文件中有关映射目录与映射端口的配置 。

      • 修改端口映射----格式( -p, --publish ip:[hostPort]:containerPort | [hostPort:]containerPort)

        # vi config.v2.json
        
        "Ports":{"80/tcp":[{"HostIp":"0.0.0.0","HostPort":"7965"}]}
        #hostip这个属性很容易理解成限制可以访问的IP地址,其实是指服务器可以选择监听来自哪个网卡的访问请求。我们在用的时候一般都只有一个网卡,所以只能写本机的IP地址或者回路地址。否则在启动服务器的时候报错
        
        "ExposedPorts"  ???
        
        # hostconfig.json
        "PortBindings":{
          "80/tcp":[{"HostIP":"","HostPort":"7964"}],
          "22/tcp":[{"HostIP":"","HostPort":"4520"}]
          }
        
      • 修改volume映射 (-v|--volume[=[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]

        # vi config.v2.json
        "MountPoints":{
           
           # 要映射的container内部的dir
           "/usr/share/nginx/html":{     
               "Source":"/var/lib/docker/volumes/vol_test/_data",
               "Destination":"/usr/share/nginx/html", 
               "RW":true, 
               "Name":"vol_test",
               
               #"https://stackoverflow.com/questions/42195334/docker-compose-volumes-driver-local-meaning"
               "Driver":"local",
               
               "Type":"volume",
               "Relabel":"z",
               "ID":"108d530236ce83855bf4b3cc11a25a3e7484b0f4c5aa757dc80de2e08edf1f85",
               "Spec":{
                  "Type":"volume",
                  "Source":"vol_test",
                  "Target":"/usr/share/nginx/html"
                },
              "SkipMountpointCreation":false
               }
            }
        
        # vi hostconfig.json
        "Binds":["vol_test:/usr/share/nginx/html"]
        
    • 重启docker服务systemctl restart|start docker

    • 重启目标docker 容器 docker start container_id|container_name

  2. 将当前容器保存为新的镜像,并以-v的方式重新启动

    • 保存为新镜像:docker commit container_id|container_name new_image_name;
    • 指定挂载卷,指定端口映射,启动新的容器:docker run -it -v host_dir:container_dir:rw|z -p hostports:container_ports --name container_new_name new_image_name /bin/bash
    • 停止旧的容器docker stop container_name; docker rm container_name|docker conatiner prune(rm为需要操作,否则重命名时仍会提示冲突)
    • 将新的容器名重命名为旧容器名称docker rename container_new_name container_name
  3. 主要参考 https://stackoverflow.com/questions/28302178/how-can-i-add-a-volume-to-an-existing-docker-container

posted @ 2021-11-30 13:30  Walker-r  阅读(333)  评论(0编辑  收藏  举报