docker - 如何将卷从移动到新的Docker容器?

标签 docker docker-volume dockerpy

我正在努力实现一种机制来升级容器的基本镜像。为此,我需要:

  • 从当前容器中获取卷列表;
  • 使用旧容器(卷,网络等)中的配置创建一个新容器

    建立新的容器

    我试图这样做:
    docker_api.create_container(
            image=creation_data.get('image'),
            hostname=creation_data.get('hostname'),
            volumes=creation_data.get('volumes'),
            host_config=docker_api.create_host_config(
                binds=creation_data.get('volume_bindings'),
                port_bindings={80: 80},
                restart_policy={"MaximumRetryCount": 0, "Name": "always"}
            ))
    

    创建数据

    从旧容器中收集的creation_data如下所示:
     {
        'image': 'docker.akema.fr:5000/coaxis/coaxisopt_daemon:latest',
        'hostname': "test-01",
        'volumes': [
            "/home/mast/.ssh",
            "/etc/mast"
        ],
        'volumes_bindings': {
            "841d6a1709b365763c85fb4b7400c87f264d468eb1691a660fe81761da6e374f": {
                'bind': "/home/mast/.ssh",
                'mode': 'rw'
            },
            "002730cbb4dd9b37ad808915a60081508885d533fe003b529b8d0ab4fa46e92e": {
                'bind': "/etc/mast",
                'mode': 'rw'
            }
        },
        'networking_config': {
            'EndpointsConfig': {'opt_network_508be7': {'IPAMConfig': {'IPv4Address': '10.0.0.1'}}}
        }
    }
    



    在检查新容器时,Mounts节似乎没有正确的音量 Source fields is a different path

    如何根据旧容器信息将卷装载到新容器?

  • 最佳答案

    我不知道您对第一个容器的启动方式有多少控制权,但是如果您这样做:

    docker run --name container1 --volume vol1:/my/vol1/dir --volume vol2:/my/vol2/dir image1
    

    要运行container1,您只需要执行以下操作即可将container1卷重用于container2:
    docker run --name container2 --volume vol1:/my/vol1/dir --volume vol2:/my/vol2/dir image2
    

    然后,删除不会删除卷的container1(即使它们尚未被其他容器重用)。

    vol1和vol2数据将存储在主机上的/var/lib/docker/volumes/vol1/_data//var/lib/docker/volumes/vol2/_data/下。

    因此,答案将是:不要为此使用匿名卷,而应使用命名卷。而且,如果您有一个带有匿名卷的旧式容器,您需要重用,那么我想您可以暂时将它们手动复制到新容器的名为的卷中。

    关于docker - 如何将卷从移动到新的Docker容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42518022/

    相关文章:

    typescript - SonarQube:找不到 typescript 模块

    windows - 适用于 Windows 的 Docker : cannot assign requested address

    shell - Ansible Shell 无法拉取 Docker 镜像

    python - 在分离之前等待 docker 容器健康检查成功

    docker - 如何在多个 docker 主机之间共享图像?

    node.js - 通过 Docker 访问 Web 应用程序时连接被拒绝

    python - 更改后,Docker卷在容器上更新,但主机未发生任何变化

    docker - 使用 docker compose 创建卷时如何授予非 root 权限?

    BlueMix 上的 Docker 卷大小限制