Чтобы ответить на вопрос, заданный в заголовке:
Почему я не могу просто установить ssh в Docker-контейнер с моего хоста Windows?
Docker - это способ настройкиНастройки ядра Linux для процесса, чтобы ограничить то, что процесс может видеть (пространства имен) и сколько ресурсов может использовать этот процесс (cgroups). Таким образом, этот вопрос звучит так: «Почему я не могу войти в процесс по ssh», и ответ обычно - потому что этот процесс не является сервером sshd. Образ Ubuntu для Docker не является виртуальной машиной со всеми связанными с ней демонами, он даже не включает ядро. Вместо этого это минимальная файловая система с утилитами в среде Ubuntu (например, apt-get
и bash
).
С другой стороны, команда docker exec
работает, потому что она выполняет вторую команду вта же изолированная среда, что и остальная часть контейнера. Так что если bash
установлен в образе, то docker exec -it $container_id bash
запустит интерактивную оболочку с теми же пространствами имен и группами, что и остальные процессы вашего контейнера.
Если вы хотите использовать ssh в своем контейнере, мойсовет, что вы не делаете. Это похоже на запах кода, признак того, что вы рассматриваете контейнеры как виртуальную машину, и у вас будут проблемы с неизменностью и эфемерной природой контейнеров. Целью работы с контейнерами является включение всех ваших изменений в систему управления версиями, создание нового образа и развертывание этого образа для каждого изменения производственной среды. Это исключает риск смещения состояния, когда интерактивные изменения были сделаны со временем одним человеком и неизвестны человеку, пытающемуся перестроить среду позже.
Если вы все еще предпочитаете игнорировать совет или ваше приложение явносервер sshd, то вам нужно установить и настроить sshd как ваше работающее приложение внутри контейнера. документация от Docker о том, как это сделать, и множество примеров на Docker Hub от разных людей, если вы будете искать по sshd (обратите внимание, что я не считаю, что что-то из этого является официальным, поэтому я не рекомендуюлюбой из них).