gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:23:21 24 4
gpt4 key购买 nike

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

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

    建立新的容器

    我试图这样做:
    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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com