🐳 Как подключиться к контейнеру Docker по ssh

Мануал

После того, как у вас появился контейнер 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 с хост-машины, указав IP-адрес, который вы определили ранее, и используя УЗ root, для которого вы только что настроили пароль.
$ ssh root@172.17.0.2

Это все, что нужно сделать.

Теперь вы сможете подключиться к своему работающему контейнеру по SSH, чтобы запускать команды и управлять им.

Конечно, метод использования команды docker exec должен продолжать работать!

Заключение

В этом руководстве мы рассмотрнли, как подключиться к работающему контейнеру Docker с хост-системы по SSH.

Docker уже предоставляет нам несколько способов подключения к контейнеру, но в некоторых ситуациях может быть полезно иметь возможность подключаться к контейнерам по SSH.

Сложность заключается в том, что в большинстве контейнеров еще не установлен SSH, поскольку они обычно настроены с минимальными требованиями.

Это требует от нас нескольких дополнительных шагов, но, как вы увидели здесь, это не так сложно сделать.

Добавить комментарий