Запуск докер-контейнера через Python API с определенным ulimit - PullRequest
0 голосов
/ 26 февраля 2019

Теперь я хочу создать контейнер для запуска фиктивной команды в изображении, следуя этой простой документации / учебнику: https://docker -py.readthedocs.io / en / stable / container.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 Traceback (последний вызов был последним) в () ----> 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, команда = 'date')

~ / anaconda3 / lib / python3.7 / site-packages / docker / models / container.py в запуске (self, image, command, stdout, stderr, remove, ** kwargs) 812, если exit_status! = 0: 813 повысить контейнер ContainerError (-> контейнер 814, exit_status, команда, изображение, из 815) 816

Хотя следующая команда работает отлично:

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

В чем проблема в комбинации параметров, которые яиспользуется?

1 Ответ

0 голосов
/ 26 февраля 2019

Ваши команды python и shell не идентичны: в команде shell вы указываете пределы soft, а в python вы указываете пределы hard.Синтаксис аргумента для 1004 * флага команды :

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

И в документации объясняется:

Примечание. Если вы не укажетежесткий предел, мягкий предел будет использоваться для обоих значений.Если никакие ulimits не установлены, они будут унаследованы от ulimits по умолчанию, установленных на демоне.

Чтобы получить идентичное поведение, я бы попытался изменить ваши объявления ulimit python на

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

Это звучит как недостаток документации по питону , которая говорит только о том, что soft и hard являются необязательными аргументами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...