【问题标题】:How to bind volumes in docker-py?如何在 docker-py 中绑定卷?
【发布时间】:2014-06-10 18:37:41
【问题描述】:

我认为这在几个月前还有效。常规命令行 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']))

..总是告诉我新的不存在。 volumes-from 应该如何用 docker-py 完成?

【问题讨论】:

    标签: python docker dockerpy


    【解决方案1】:

    以下是当前进行卷绑定的工作方式:

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

    【讨论】:

    • 您将如何处理已在运行的命名卷?
    【解决方案2】:

    原始答案已在 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)
    

    【讨论】:

      【解决方案3】:

      从 docker api 版本 1.10 开始,volumes-fromstart() 的参数,而不是 create()

      可从docker-py release 0.3.2获得

      引入更改的拉取请求:https://github.com/dotcloud/docker-py/pull/200

      【讨论】:

      猜你喜欢
      • 2021-08-10
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2019-09-14
      • 2017-07-05
      相关资源
      最近更新 更多