使用docker-py将参数传递给docker容器

时间:2019-04-02 14:53:40

标签: python python-3.x docker dockerpy

我整夜从Docker应用程序启动Docker映像,并带有附加参数的CMD命令。 使用docker可以做到

docker run -p 8888:8888 -v ~/:/tmp/home/ my_image my_start_cmd.sh --no-browser --ip=0.0.0.0

my_start_cmd.sh --no-browser --ip=0.0.0.0是我带有参数的CMD。

如何使用相同的参数从docker-py api运行它? 那是我使用docker api的原始python代码。

import docker

client = docker.from_env()
container = client.containers.run("my_image", detach=True)

for line in container.logs(stream=True):
    print (line.strip())

1 个答案:

答案 0 :(得分:0)

要简单地将参数传递给docker CMD,将完整的命令与参数一起传递,并将端口映射作为dict作为ports参数就足够了,如以下示例所示:

import docker

client = docker.from_env()
container = client.containers.run(image='my_image',
  command="start-notebook.sh --no-browser --ip=0.0.0.0",
  ports={'8888': 8888}
)

要映射卷,必须按如下所示使用新的Low Level API(docker.APIClient())作为原始命令行:

client = docker.APIClient()
container = client.create_container(
            image='my_image',
            stdin_open=True,
            tty=False,
            command="start-notebook.sh --no-browser --ip=0.0.0.0",
            volumes=['~/', '/tmp/home/'],
            host_config=client.create_host_config(
                port_bindings={
                    8888: 8888,
                },
                binds={
                    ' ~/': {
                        'bind': '/tmp/home/',
                        'mode': 'rw',
                }
            }),
            ports=[8888],
            detach=True,
)