通过具有特定ulimit的python API运行docker容器

时间:2019-02-26 11:49:09

标签: python-3.x docker

现在,我想按照以下简单的文档/教程创建一个容器,以在图像内运行虚拟命令: https://docker-py.readthedocs.io/en/stable/containers.html#container-objects

import docker
client = docker.from_env()
client.containers.run(shm_size='1g', ulimits=[docker.types.Ulimit(name='memlock', hard=-1), docker.types.Ulimit(name='stack', hard=67108864)], image='ubuntu:16.04', auto_remove=True,  command='date')

这是结果:

  

-------------------------------------------------- ---------------------------- ContainerError跟踪(最近的调用   最后)在()   ----> 1 client.containers.run(shm_size ='1g',ulimits = [docker.types.Ulimit(name ='memlock',hard = -1),   docker.types.Ulimit(name ='stack',hard = 67108864)],   image ='ubuntu:16.04',auto_remove = True,command ='date')

     

〜/ anaconda3 / lib / python3.7 / site-packages / docker / models / containers.py在   运行(自身,图像,命令,stdout,stderr,删除,** kwargs)       812如果exit_status!= 0:       第813章   -> 814容器,exit_status,命令,图像,输出       815)       816

尽管以下命令可以完美运行:

docker run --shm-size=1g  --ulimit memlock=-1  --ulimit stack=67108864 --rm -t ubuntu:16.04 "date"

我使用的选项组合有什么问题?

1 个答案:

答案 0 :(得分:2)

您的python和shell命令并不相同:在shell命令中,您指定了soft限制,而在python中,您指定了hard限制。 --ulimit command flag的参数语法为:

<type>=<soft limit>[:<hard limit>]

文档说明:

  

注意:如果不提供硬限制,则软限制将同时用于两个值。如果未设置ulimit,则它们将从在守护程序上设置的默认ulimit继承。

要获得相同的行为,我将尝试将python ulimit声明更改为

docker.types.Ulimit(name='stack', soft=67108864, hard=67108864)]

这听起来像python documentation的缺点,它仅表示softhard都是可选参数。