Можно, , но вы доверяете контейнеру с неограниченным корневым доступом к хосту .
Когда вы запускаете контейнер, который хочет запускать другие контейнеры, вам необходимо привязать монтированиеDocker-сокет хоста, обычно с
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
. Dockerfile должен установить стандартный интерфейс командной строки Docker (или любой другой язык Docker API, зависящий от языка), а затем, когда он вызывает docker
, он будет работать точно так же, как если бы вывыполнил ту же команду Docker с хоста.В частности, это означает, что любые опции docker run -v
из контейнера используют путь к файловой системе хоста .Это также означает, что контейнер может запускать субконтейнер с доступом к любому файлу на хосте, даже в системных каталогах, таких как /etc
, и может свободно проверять детали любого другого работающего контейнера Docker.
В описываемой вами архитектуре безопаснее было бы объединить части «планировщик» и «рабочий» в один контейнер.Он периодически опрашивает сервер и, если есть над чем работать, делает это.Если вы хотите выполнять больше работы одновременно, вы можете запустить несколько копий этого контейнера.Это также позволяет вам легко ограничивать объем параллельной работы, которую вы выполняете одновременно, поэтому вы не пытаетесь выполнить тысячу заданий, которые невозможно выполнить одновременно в вашей 4-ядерной системе.