Можно ли запустить Docker-контейнер из Docker-контейнера? - PullRequest
0 голосов
/ 29 декабря 2018

... так, чтобы оба контейнера оба работали на одном хосте , но НЕ контейнер внутри контейнера ?

Длинная версия

Я создал две программы на Python, называемые scheduler и worker.Планировщик периодически спрашивает сервер, есть ли какие-либо действия task.Если что-то наступит в ближайшее время task, scheduler загрузит входные данные и начнет worker с загруженными данными.Я сейчас думаю о контейнеризации двух программ.Вот что мне нужно:

  • Make Dockerfile s для двух контейнеров.
  • Два контейнера должны иметь общий том (принадлежащий хосту, конечно), где вводданные загружаются / используются.
  • Контейнер планировщика должен иметь возможность запускать рабочий контейнер так, чтобы рабочий контейнер работал в среде хоста, но НЕ внутри контейнера планировщика.

Есть липростой способ сделать это?

1 Ответ

0 голосов
/ 29 декабря 2018

Можно, , но вы доверяете контейнеру с неограниченным корневым доступом к хосту .

Когда вы запускаете контейнер, который хочет запускать другие контейнеры, вам необходимо привязать монтированиеDocker-сокет хоста, обычно с

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

. Dockerfile должен установить стандартный интерфейс командной строки Docker (или любой другой язык Docker API, зависящий от языка), а затем, когда он вызывает docker, он будет работать точно так же, как если бы вывыполнил ту же команду Docker с хоста.В частности, это означает, что любые опции docker run -v из контейнера используют путь к файловой системе хоста .Это также означает, что контейнер может запускать субконтейнер с доступом к любому файлу на хосте, даже в системных каталогах, таких как /etc, и может свободно проверять детали любого другого работающего контейнера Docker.

В описываемой вами архитектуре безопаснее было бы объединить части «планировщик» и «рабочий» в один контейнер.Он периодически опрашивает сервер и, если есть над чем работать, делает это.Если вы хотите выполнять больше работы одновременно, вы можете запустить несколько копий этого контейнера.Это также позволяет вам легко ограничивать объем параллельной работы, которую вы выполняете одновременно, поэтому вы не пытаетесь выполнить тысячу заданий, которые невозможно выполнить одновременно в вашей 4-ядерной системе.

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