Как связать тома в docker-py?

Я думаю, что это работало до нескольких месяцев назад. Обычный докер командной строки:

>> 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']))

..всегда говорит мне, что нового не существует. Как volumes-from должно быть сделано с docker-py?


person Jasper van den Bosch    schedule 25.04.2014    source источник


Ответы (3)


Ниже приведен текущий рабочий способ привязки томов:

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'))
person josepainumkal    schedule 11.05.2017
comment
Как бы вы сделали это с именованными томами, которые уже запущены? - person Connor; 30.09.2018

Оригинальный ответ устарел в 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)
person techarch    schedule 27.11.2016

Начиная с docker API версии 1.10 volumes-from является аргументом для start() вместо create()

Доступно в выпуске docker-py 0.3.2.

Запрос на включение внесенных изменений: https://github.com/dotcloud/docker-py/pull/200

person Jasper van den Bosch    schedule 28.04.2014
comment
Упомянутое изменение доступно в docker-py 0.3.2. - person Ivan Fraixedes; 21.07.2014