2015-04-30 2 views
2

У меня есть два приложения:Докер - Run Контейнер из Внутри контейнера

  • консольный скрипт на Python, который делает короткую (МОГ) задачу и выходит
  • колбу, «внешний интерфейс» для запуска консольного приложения, передавая это аргументы командной строки

В настоящее время проект Flask содержит копию сценария консоли и запускает его с использованием subprocess, когда это необходимо. Это отлично работает в контейнере Docker, но они слишком плотно соединены. Бывают ситуации, когда я хочу запустить консольный скрипт из командной строки.

Я хотел бы разделить два приложения на отдельные контейнеры. Чтобы сделать эту работу, приложение Flask должно иметь возможность запускать консольный скрипт в отдельном контейнере (который может быть на другой машине). В идеале я бы не хотел запускать контейнер консольного скрипта внутри контейнера Flask, так что на один контейнер запускается только один процесс. Кроме того, мне нужно будет передать аргументы командной строки консольного скрипта.


Q: Как я могу породить контейнер с недолговечной задачи внутри контейнера?


ответ

4

Вы можете просто дать доступ контейнера для выполнения команд Докер. Он будет либо иметь прямой доступ к сокету докера, либо ему понадобятся различные переменные и файлы среды tcp (сертификаты клиентов и т. Д.). Очевидно, что на контейнере также потребуется docker client.

Простой пример контейнера, который может выполнять команды Докер на хосте:

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

Важно отметить, что это не то же самое, как работает грузчиком демон в контейнере. Для этого вам нужно решение вроде jpetazzo/dind.

+0

Спасибо за ответ. Я сделаю это. Я предполагаю, что это не сработает, если консольный скрипт должен запускаться на другом хосте, поскольку сокет передается из хоста Flask. Как я могу перейти в сокет с другой машины? – user4794170

+0

Самая сложная часть этого процесса - выяснить, как определить этот узел, и, конечно же, убедиться, что хост доступен из контейнера Flask через tcp. Затем контейнеру Flask нужны сертификаты хост-клиента. Это на самом деле звучит как кошмар - есть ли веская причина не просто убедить себя, что они работают на одном и том же хосте? – kojiro

Смежные вопросы