Вы можете , но на самом деле Docker не предназначен для использования.
A Docker контейнер обычно является оберткой вокруг одного обработать. При стандартной настройке вы создаете образ , в котором это приложение собрано и упаковано, и вы можете просто запустить его без какой-либо дополнительной настройки. Обычно неинтересно запускать пустой дистрибутивный контейнер Linux (в котором не установлено приложение) или запускать интерактивную оболочку в качестве основного процесса контейнера. Учебники вроде Docker s Создайте и запустите образ. выполните эту последовательность действий.
Следствием этого является то, что контейнеры обычно не имеют локального состояния. В лучшем случае любое состояние, в котором нуждается контейнер, находится во внешней базе данных; если вы не можете этого сделать, вы сохраняете локальное состояние в томе , который переживает контейнер.
И, наконец, крайне обычным делом является удаление и воссоздание контейнеров. Вам нужно сделать это, чтобы изменить некоторые общие параметры; в кластерной среде, такой как Kubernetes, это может произойти вне вашего контроля. Когда это произойдет, новый контейнер перезапустится, запустив настройку по умолчанию, и он не будет знать о каких-либо ручных изменениях, которые могли быть внесены в предыдущий контейнер.
Таким образом, вы обычно не хотите пытаться устанавливать программное обеспечение непосредственно в работающий контейнер, так как он потеряется, как только контейнер выйдет. В принципе, вы можете получить оболочку в контейнере (через docker exec
), но это скорее инструмент отладки, чем инструмент администрирования. Вы можете сделать единственный процесс, который запускается контейнером, как демон s sh, но все, что вы запускаете таким образом, будет потеряно, как только контейнер выйдет (и я никогда не встречал рецепта, который правильно и безопасно настраивал бы учетные данные для доступа it).
Я бы порекомендовал изучить стандартную систему Dockerfile и запускать автономные Docker образы, пытаясь приспособить Ansible к этой довольно другой среде.