我正在尝试'移植'这个(工作)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'.
有什么建议吗?
答案 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
中找到