现在,我想按照以下简单的文档/教程创建一个容器,以在图像内运行虚拟命令: 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"
我使用的选项组合有什么问题?
答案 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的缺点,它仅表示soft
和hard
都是可选参数。