Выполнить команду docker exec из другого контейнера без использования ssh или docker.sock - PullRequest
0 голосов
/ 24 июня 2019

Основная проблема в том, что у меня есть два контейнера: containerA и containerB. containerB - это контейнер Portia, который работает, и я не могу остановиться из-за внешних причин. И в контейнере А мне нужно выполнить исполняющий модуль Docker контейнера B.

Я перечитал два основных решения, первое, которое я уже попробовал, и оно работает, использует ssh для запуска скрипта на хосте, но у меня не может быть пользователя без пароля, и предоставление пароля мне кажется, что это не так. лучший способ сделать это. Второй способ заключается в использовании docker.sock и файла для создания docker, но многие в комментариях говорили, что это небезопасный способ.

Может кто-нибудь объяснить мне иначе или я ошибаюсь и почему? Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

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

  • Использование ssh
  • Использование док-станции

оба из которых вы считаете небезопасными.

Но это не правда. Я не уверен насчет ssh, но докер сокет может быть защищен.

Проверьте это out.

Вы должны включить tls в своем сокете-демоне docker, чтобы обеспечить его безопасность. И тогда вы можете безопасно запустить Docker удаленно.

Цитирование первого абзаца по ссылке, указанной выше.

По умолчанию Docker работает через не сетевой сокет UNIX. Оно может также при желании может общаться через HTTP-сокет.

Если вам нужно, чтобы Docker был доступен через сеть в сейфе Таким образом, вы можете включить TLS, указав флаг tlsverify и указание флага tlscacert Docker на доверенный сертификат CA.

В режиме демона разрешены подключения только от клиентов заверенный сертификатом, подписанным этим CA. В режиме клиента он подключается только к серверам с сертификатом, подписанным этим CA.

Надеюсь, это поможет.

0 голосов
/ 24 июня 2019

Вы в основном выделили только два способа прямого запуска команды в другом контейнере. В частности, разрешение docker exec доступа дает вашему процессу неограниченный контроль корневого уровня над хостом , и любая проблема безопасности в вашей настройке открывает вполне реальную возможность взлома хоста (я видел много SO вопросов с тривиальные атаки с использованием инъекций оболочки на вызовы типа system("docker exec $COMMAND").

Лучше всего стараться избегать docker exec как можно больше. Это очень полезный инструмент отладки, но он вообще не должен быть в вашем основном потоке приложений. (Это очень похоже на «ssh как root для сервера и ...», что никогда не является лучшей практикой.). Если один контейнер должен запросить, чтобы другой контейнер что-то сделал, это обычно делается через какой-то HTTP-интерфейс.

...