После того, как у вас появился контейнер Docker, работающий в системе Linux, одна из вещей, которые вам, вероятно, потребуется сделать, – это запустить команды внутри контейнера.
Это позволяет вам использовать контейнер так же, как и физический компьютер, за исключением того, что Docker уже сделал за нас большую часть работы по настройке.
Доступны две команды, которые позволяют запускать команды в контейнере Docker.
Первая – это docker exec, а вторая команда, которая позволяет нам подключиться к работающему контейнеру, – это docker attach.
Этих команд обычно достаточно, но вы можете оказаться в сценарии, в котором вы предпочтете использовать SSH для подключения к контейнеру Docker и управления им.
Не все контейнеры Docker подготовлены для работы по SSH.
Обычно контейнеры Docker очень легкие и запрограммированы только на одну задачу.
Однако некоторые контейнеры Docker позволяют использовать SSH, и это может значительно упростить управление контейнером.
В этом руководстве мы увидим, как подключиться к контейнеру Docker через SSH из хост-системы в командной строке Linux.
В этом примере мы уже установили Docker и образ NGINX с помощью команды docker pull nginx.
Следуйте пошаговым инструкциям, показанным ниже, чтобы увидеть, как мы определяем IP-адрес контейнера, а затем с помощью команды SSH подключитесь к работающему контейнеру.
Во-первых, контейнер Docker должен быть запущен.
Убедитесь, что вы уже запустили его, используя следующую команду.
Еще раз обратите внимание, что мы используем образ NGINX, но вы можете заменить имя своего собственного образа в этой и в будущих командах.
$ docker run --name nginx -d nginx
С помощью этой команды убедитесь, что ваш контейнер запущен:
$ docker ps
Теперь мы можем использовать следующую команду, чтобы определить IP-адрес нашего контейнера NGINX.
$ docker inspect -f "{{ .NetworkSettings.IPAddress }}" nginx

В нашем случае контейнер NGINX имеет IP-адрес 172.17.0.2.
Теперь мы можем попытаться подключиться к этому IP-адресу по SSH и учетную запись root.
$ ssh root@172.17.0.2
На этом этапе вы либо успешно подключитесь к работающему контейнеру, либо получите ошибку «connection refused».
В случае ошибки выполните следующие действия, чтобы настроить SSH-сервер в контейнере.
Если SSH не работает, нам нужно убедиться, что в контейнере установлено программное обеспечение.
Подключитесь к контейнеру с помощью следующей команды:
$ docker exec -it nginx /bin/bash
Затем установите в нем SSH.
В этом примере мы используем диспетчер пакетов apt, но вам может потребоваться адаптировать команду, если в вашем контейнере используется другой диспетчер пакетов.
# apt update && apt -y install openssh-server
Затем настройте контейнер, чтобы мы могли войти под УЗ root через SSH.
# echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
Не забудьте изменить пароль root, чтобы вы могли войти в систему.
# passwd
Наконец, запустите службу SSH в контейнере.
# /etc/init.d/ssh start
$ ssh root@172.17.0.2
Это все, что нужно сделать.
Теперь вы сможете подключиться к своему работающему контейнеру по SSH, чтобы запускать команды и управлять им.
Конечно, метод использования команды docker exec должен продолжать работать!
Заключение
В этом руководстве мы рассмотрнли, как подключиться к работающему контейнеру Docker с хост-системы по SSH.
Docker уже предоставляет нам несколько способов подключения к контейнеру, но в некоторых ситуациях может быть полезно иметь возможность подключаться к контейнерам по SSH.
Сложность заключается в том, что в большинстве контейнеров еще не установлен SSH, поскольку они обычно настроены с минимальными требованиями.
Это требует от нас нескольких дополнительных шагов, но, как вы увидели здесь, это не так сложно сделать.