从python运行docker容器

时间:2017-12-19 23:22:38

标签: python docker

我正在尝试'移植'这个(工作)shell命令:

IMAGE_NAME="myimage"
CONTAINER_NAME="myname"
docker run -d --name $CONTAINER_NAME $IMAGE_NAME tail -f /dev/null

使用以下命令从图像到python启动容器:

import subprocess
IMAGE_NAME="myimage"
CONTAINER_NAME="myname"
subprocess.check_output(['docker', 'run',"-d","--name %s" % CONTAINER_NAME,"%s" % IMAGE_NAME])

但是如果失败了:

unknown flag: --name myname
See 'docker run --help'.

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

Docker的python库暴露了Docker API,因此您可以以编程方式处理容器,调用它们上的方法等。

https://github.com/docker/docker-py

如果您想坚持使用子进程方式,则需要将每个参数放在传递给check_output()的列表中的单独元素中。请注意,参数由空格分隔,无论一个参数是否为交换机的值,如--name name - 这些仍然是两个参数。当然,如果参数用引号分组,例如--name "a name",然后整个a name部分将成为子进程调用中的单个元素。

答案 1 :(得分:2)

在参数中放置空格的任何地方都应该是列表中的不同元素。它认为"--name myname"是一面旗帜。你试过了吗?

subprocess.check_output(['docker', 'run', '-d', '--name', CONTAINER_NAME, IMAGE_NAME])

答案 2 :(得分:0)

基于以下代码的部分 https://github.com/docker/docker-py

import docker
client = docker.DockerClient(base_url='unix://var/run/docker.sock')
container = client.containers.run('28_googleplay_root_x86_64:latest', name='your_name', detach=True, ports={'5556/tcp': 5556, '5555/tcp': 5555}, devices=['/dev/kvm'])

将创建并分离容器。 图书馆文档可在此处https://docker-py.readthedocs.io/en/stable/index.html

中找到