如何在docker-py中绑定卷?
我觉得这个在几个月前还可以正常使用。普通的命令行docker:
>> docker run --name 'mycontainer' -d -v '/new' ubuntu /bin/bash -c 'touch /new/hello.txt'
>> docker run --volumes-from mycontainer ubuntu /bin/bash -c 'ls new'
>> hello.txt
运行得很好,但我在docker-py中却无法做到:
from docker import Client #docker-py
import time
docker = Client(base_url='unix://var/run/docker.sock')
response1 = docker.create_container('ubuntu', detach=True, volumes=['/new'],
command="/bin/bash -c 'touch /new/hello.txt'", name='mycontainer2')
docker.start(response1['Id'])
time.sleep(1)
response = docker.create_container('ubuntu',
command="/bin/bash -c 'ls new'",
volumes_from='mycontainer2')
docker.start(response['Id'])
time.sleep(1)
print(docker.logs(response['Id']))
..总是告诉我“new”不存在。用docker-py应该怎么实现volumes-from
呢?
3 个回答
2
从Docker的API版本1.10开始,volumes-from
这个参数是用在start()
函数里的,而不是之前的create()
函数。
这个功能在docker-py 0.3.2版本中可以使用。
引入这个变化的请求可以在这里找到:https://github.com/dotcloud/docker-py/pull/200
5
原来的答案在API中已经不再使用,不能再工作了。下面是如何通过使用创建主机配置命令来实现这个功能的方法。
import docker
client = docker.from_env()
container = client.create_container(
image='ubuntu',
stdin_open=True,
tty=True,
command='/bin/sh',
volumes=['/mnt/vol1', '/mnt/vol2'],
host_config=client.create_host_config(binds={
'/tmp': {
'bind': '/mnt/vol2',
'mode': 'rw',
},
'/etc': {
'bind': '/mnt/vol1',
'mode': 'ro',
}
})
)
client.start(container)
10
下面是目前进行卷绑定的有效方法:
volumes= ['/host_location']
volume_bindings = {
'/host_location': {
'bind': '/container_location',
'mode': 'rw',
},
}
host_config = client.create_host_config(
binds=volume_bindings
)
container = client.create_container(
image='josepainumkal/vwadaptor:jose_toolUI',
name=container_name,
volumes=volumes,
host_config=host_config,
)
response = client.start(container=container.get('Id'))