我正在努力实现一种机制来升级容器的基本镜像。为此,我需要:
建立新的容器
我试图这样做:
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/