При заказе виртуального сервера с готовым рецептом Dockhand вы получаете VDS, на котором уже установлено необходимое ПО и выполнена базовая настройка. Сервис развернут через Docker Compose, запущен и готов к работе. Также в рецепт входят предварительно настроенные nginx, TLS и файрвол.
В статье расскажем, как войти в Dockhand после установки, проверить его работу и управлять контейнерами.
По умолчанию устанавливается последняя версия Dockhand. Имя пользователя администратора — admin. Файлы сервиса размещаются в каталоге /opt/dockhand, а пароль администратора сохраняется в файле /root/Dockhand-final.txt. Рецепт работает на Debian/Ubuntu и CentOS/Rocky/Alma.
Что такое Dockhand
Dockhand — это современная веб-панель для управления Docker-инфраструктурой. Через браузер она позволяет выполнять основные операции с контейнерами:
- создавать их с расширенными параметрами;
- запускать, останавливать, перезапускать и удалять;
- просматривать процессы, переменные окружения, слои, логи, потребление CPU и памяти;
- открывать встроенный терминал и файловый браузер без отдельного SSH-подключения.
Dockhand поддерживает работу с Docker Compose: можно редактировать Compose-файлы через визуальный редактор, разворачивать приложения из Git-репозиториев, настраивать автоматическую синхронизацию с помощью вебхуков, выполнять загрузку образов, принудительный redeploy и плановые обновления. Это делает Dockhand удобным не только для ручного администрирования контейнеров, но и для GitOps-подхода, когда конфигурация приложений хранится в репозитории.
Отдельное внимание уделено наблюдаемости и безопасности. Dockhand показывает live-метрики CPU, памяти, ввода вывода сети и диска по контейнерам, поддерживает потоковый просмотр логов в реальном времени, ведёт журнал активности контейнеров и может отправлять уведомления по email или с помощью вебхуков. Для защиты доступны OIDC/SSO, MFA/TOTP, LDAP/Active Directory, RBAC и сканирование образов на уязвимости через Grype и Trivy.
Dockhand можно использовать как для одного локального Docker-хоста, так и для нескольких окружений. Поддерживаются подключение через локальный Docker socket, удалённые TCP-подключения с TLS и агент Hawser, который позволяет управлять Docker-хостами за NAT, firewall или с динамическим IP без открытия входящих портов.
Дополнительно Dockhand поддерживает настройку интерфейса: светлую и тёмную темы, изменение размера шрифтов, управление колонками таблиц, изменение размеров плиток Dashboard и сохранение пользовательских предпочтений.
Вход в Dockhand
После автоматической установки Dockhand можно открыть в браузере по адресу:
https://<IP-адрес-сервера>Для входа используйте учётные данные администратора, созданные рецептом. Логин пользователя — admin, а пароль сохраняется на сервере в итоговом файле установки: /root/Dockhand-final.txt

При самоподписанном сертификате браузер покажет предупреждение. Примите исключение для IP-адреса сервера.
Обзор панели управления
После успешной авторизации откроется главная страница Dockhand с подключенным локальным окружением Docker.
В боковом меню находятся основные разделы управления, а в центральной части отображается содержимое выбранного раздела.

Кратко разберём основные разделы панели:
- Dashboard — общий обзор окружений: статус подключения, количество контейнеров, нагрузка CPU и памяти, health-статусы и недавняя активность.
- Containers — управление контейнерами: запуск, остановка, перезапуск, удаление, просмотр логов, статистики, терминала и файлов.
- Logs — просмотр логов контейнеров в реальном времени, включая логи остановленных контейнеров.
- Shell — встроенный терминал для выполнения команд внутри запущенного контейнера.
- Stacks — управление приложениями Docker Compose: создание, редактирование и запуск stack’ов из YAML-файлов или Git-репозиториев.
- Images — управление Docker-образами: просмотр, загрузка, удаление, теги, экспорт и проверка уязвимостей.
- Volumes — управление томами для постоянного хранения данных контейнеров.
- Networks — управление Docker-сетями, через которые контейнеры взаимодействуют между собой.
- Templates — готовые шаблоны для быстрого развёртывания контейнеров и stack’ов.
- Registry — поиск и загрузка образов из подключённых Docker Registry.
- Activity — журнал событий Docker, который фиксирует запуск, остановку, создание контейнеров и другие действия.
- Schedules — настройка запланированных задач, например, автообновлений и очистки.
- Settings — настройки Dockhand, окружений, пользователей, доступа, уведомлений и интеграций.
Смена пароля администратора
После первого входа при необходимости можно сменить пароль администратора на более удобный и безопасный для дальнейшей работы.
Чтобы сменить пароль администратора, в левом меню нажмите на иконку учётной записи admin:

В открывшемся профиле перейдите в раздел Security. В поле Password нажмите Change password.

Укажите текущий пароль в поле Current password, затем введите новый пароль в поля New password и Confirm new password. Рекомендуется использовать надёжный пароль длиной не менее 12 символов. После этого нажмите Change password.

В этом же разделе доступна настройка двухфакторной аутентификации (Two-factor authentication). Она добавляет дополнительный уровень защиты: помимо пароля, при входе потребуется одноразовый код из приложения-аутентификатора. Это снижает риск несанкционированного доступа даже в случае компрометации пароля.
Создание и запуск контейнера
Для примера развернём в Dockhand простой контейнер с nginx. Он быстро запускается, не требует сложной настройки и позволяет сразу проверить публикацию порта в браузере.
Откройте подключённое окружение Local Docker и перейдите в раздел Containers. Нажмите Create для создания нового контейнера.

В поле образа укажите nginx:latest
Нажмите Pull, чтобы скачать образ:

Далее на вкладке Container в поле имени контейнера укажите: MyNginx

Ниже настройте проброс порта:
- host: 1234
- container: 80

Это значит, что nginx внутри контейнера будет слушать порт 80, а снаружи будет доступен через порт 1234 на IP-адресе сервера.
При необходимости можно настроить дополнительные параметры:
- Resources — лимиты CPU и памяти: memory limit, memory reservation, CPU limit, CPU shares, CPU quota и CPU period.
- Security — пользователь, от имени которого запускается контейнер, привилегированный режим, добавление и удаление Linux capabilities, а также security опции вроде no-new-privileges, seccomp=unconfined и apparmor=unconfined.
- Healthcheck — встроенная проверка состояния контейнера: команда проверки, интервал запуска, timeout, количество повторов и стартовая задержка.
- DNS settings — пользовательские DNS-серверы, search-домены и дополнительные DNS опции для контейнера.
- Devices — проброс устройств хоста внутрь контейнера, например, /dev/sda на хосте в /dev/sda внутри контейнера.
- GPU — включение доступа контейнера к GPU: выбор runtime, режима доступа к GPU, драйвера и capabilities.
- Ulimits — настройка soft и hard лимитов для процессов внутри контейнера, например nofile, nproc, core, memlock, stack, cpu, fsize и locks.
После заполнения параметров нажмите Create container. Контейнер появится в списке со статусом running.


Проверить работу nginx можно в браузере: http://<IP-адрес-сервера>:1234

Если открылась стартовая страница nginx, контейнер создан и опубликован корректно.
Управление контейнером
Для управления контейнером откройте раздел Containers. В списке отображаются имя контейнера, образ, состояние, health-статус, время работы, количество перезапусков, нагрузка CPU и памяти, сетевой и дисковый ввод-вывод, IP-адрес и опубликованные порты.
Над списком доступны поиск, фильтр по статусу, создание контейнера, проверка обновлений, очистка неиспользуемых контейнеров через Prune и обновление списка.
Если выбрать один или несколько контейнеров, появятся групповые действия: Stop, Pause, Restart и Remove.

В колонке Actions доступны действия для конкретного контейнера: просмотр логов, открытие консоли, просмотр подробной информации, редактирование, перезапуск, пауза, остановка и удаление.
Развертывание приложений через Stacks / Docker Compose
Одного контейнера достаточно для простых задач, но реальные приложения часто состоят из нескольких сервисов. Например, веб-приложение может включать backend, базу данных, reverse proxy и отдельный сервис кеширования.
Для таких сценариев используется Docker Compose. В Dockhand такие Compose-проекты отображаются в разделе Stacks. Вы добавляете YAML-файл с описанием сервисов, сетей и томов, а Dockhand на его основе создаёт и запускает все контейнеры приложения как один проект.
Такой подход удобен для работы с несколькими контейнерами. Конфигурация хранится в одном файле, все связанные контейнеры создаются вместе, а обновлять и пересоздавать приложение проще, чем управлять каждым контейнером отдельно.
Создание и запуск Stack
Откройте раздел Stacks и нажмите кнопку Create.

В поле укажите имя, например: demo-stack
В редактор вставьте Compose-конфигурацию и нажмите Create & Start:
services:
nginx:
image: nginx:latest
container_name: nginx-demo
restart: unless-stopped
ports:
- "8080:80"
postgres:
image: postgres:17
container_name: postgres-demo
restart: unless-stopped
environment:
POSTGRES_DB: appdb
POSTGRES_USER: appuser
POSTGRES_PASSWORD: strongpassword
ports:
- "127.0.0.1:5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:В этом примере Dockhand развернёт два контейнера: nginx и PostgreSQL. Nginx будет доступен извне по порту 8080, а PostgreSQL будет опубликован только на локальном интерфейсе сервера 127.0.0.1.
После запуска проекта Dockhand скачает нужные образы, создаст сеть, том postgres_data и запустит контейнеры. Проект появится в разделе Stacks. В нём можно управлять всем приложением целиком: останавливать, запускать, пересоздавать и обновлять.

В разделе Containers также будет видно по колонке Stack, к какому стеку относится каждый контейнер. Это удобно, когда на сервере работает множество приложений.

Подключение удалённых Docker-хостов
Dockhand может управлять как локальным Docker-хостом, так и удалёнными серверами. Для подключения окружений доступны несколько вариантов:
- Unix socket — подключение к локальному Docker через /var/run/docker.sock. Используется, когда Dockhand запущен на том же сервере, что и Docker.
- Direct connection — прямое подключение к удалённому Docker API по HTTP/HTTPS. Подходит для серверов в защищённой сети или VPN.
- Hawser agent (Standard) — агент запускается на удалённом сервере и ожидает подключение от Dockhand. Подходит для LAN/VPN и серверов со статическим IP.
- Hawser agent (Edge) — агент сам устанавливает исходящее соединение с Dockhand. Это удобный вариант для серверов за NAT, файрвол или с динамическим IP: на удалённом Docker-хосте не нужно открывать входящие порты.
В качестве примера настройки удалённого Docker-хоста рассмотрим подключение через Hawser agent (Edge). Как правило, этот вариант проще для VDS: агент сам устанавливает исходящее соединение с Dockhand, поэтому не нужно настраивать правила файрвола на Docker-хосте для входящих подключений с IP-адреса Dockhand.
Откройте Dockhand и перейдите в раздел Settings, вкладка Environments.

Нажмите Add environment, задайте имя нового окружения, например, docker-dev01, и выберите тип подключения Hawser agent (edge). Dockhand сгенерирует токен и покажет строку запуска агента в блоке Run on your host. Скопируйте токен или всю строку целиком, затем нажмите Add в этом же окне.
После этого подключитесь к удалённому серверу, на котором установлен Docker, и создайте каталог для агента:
mkdir -p /opt/dockhand-agent
cd /opt/dockhand-agentСоздайте файл .env:
nano .envДобавьте в него параметры, полученные в Dockhand:
DOCKHAND_SERVER_URL=wss://your-dockhand.example.com/api/hawser/connect
AGENT_TOKEN=<токен-из-dockhand>
AGENT_NAME=docker-dev01Здесь:
DOCKHAND_SERVER_URL— адрес, который Dockhand показал в блоке Run on your host;TOKEN— токен, сгенерированный через Generate connection token;AGENT_NAME— имя environment, которые ранее указывали в Dockhand.
Так как в .env хранится токен подключения, ограничьте доступ к файлу:
chmod 600 .envТеперь создайте файл docker-compose.yml:
nano docker-compose.ymlДобавьте конфигурацию агента:
services:
dockhand-agent:
container_name: dockhand-agent
image: ghcr.io/finsys/hawser:latest
restart: unless-stopped
environment:
DOCKHAND_SERVER_URL: ${DOCKHAND_SERVER_URL}
TOKEN: ${TOKEN}
AGENT_NAME: ${AGENT_NAME}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- dockhand_agent_data:/data
volumes:
dockhand_agent_data:
name: dockhand_agent_dataАгенту нужен доступ к Docker socket, поэтому в compose-файле подключается: /var/run/docker.sock:/var/run/docker.sock
Через этот сокет агент сможет получать информацию о контейнерах, образах, сетях и томах, а также выполнять действия, которые запускаются из Dockhand.
Запустите агент:
docker compose up -dПроверьте, что контейнер запущен:
docker psПосмотреть логи агента можно командой:
docker logs -f dockhand-agentЕсли параметры указаны правильно, агент установит исходящее соединение с Dockhand Server. Через несколько минут окружение в разделе Settings > Environments должно перейти в состояние Connected.

После первой синхронизации в разделе Dashboard появится информация об удалённом Docker-хосте: контейнеры, образы, сети, тома и текущее состояние ресурсов сервера.

Управление Dockhand Server
Параметры запуска Dockhand Server задаются в Docker Compose-файле. После установки из рецепта этот файл находится в каталоге сервиса: /opt/dockhand/docker-compose.yml
В этом же файле задаются образ Dockhand, версия, политика перезапуска, подключённые тома, сетевые порты и переменные окружения.
Пример структуры Compose-файла:
services:
dockhand:
container_name: dockhand
image: fnsys/dockhand:v1.0.39
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- dockhand_data:/app/data
ports:
- "127.0.0.1:3000:3000"
volumes:
dockhand_data:
name: dockhand_data
networks:
default:
name: dockhand_networkDockhand работает за Nginx, внешний доступ к панели выполняется через HTTPS: https://<IP-адрес-сервера> а внутренний порт приложения доступен только локально на сервере.
Для обновления Dockhand Server укажите в файле docker-compose.yml нужную версию образа. После этого перейдите в каталог сервиса и выполните команды:
cd /opt/dockhand
docker compose pull
docker compose up -dКоманда docker compose pull загрузит актуальный образ, указанный в конфигурации, а docker compose up -d пересоздаст контейнер и запустит его в фоне.
Проверить состояние контейнера можно командой:
docker compose psПосмотреть логи:
docker compose logsили:
docker logs dockhandFirewall
При установке Dockhand рецепт автоматически настраивает файрвол, на сервере уже установлен и запущен один из поддерживаемых сервисов:
- ufw — чаще используется в Ubuntu/Debian;
- firewalld — чаще используется в AlmaLinux, Rocky Linux и CentOS.
В правилах файрвола разрешён доступ:
- 22/tcp — SSH;
- 80/tcp — HTTP (редирект на HTTPS);
- 443/tcp — HTTPS-доступ к веб-интерфейсу Dockhand.
Проверить правила ufw можно командой:
ufw statusДля firewalld используйте:
firewall-cmd --list-allТакже можно проверить, что сервер слушает нужные порты:
ss -tulpn | grep -E ':22|:80|:443'При публикации портов контейнеров Docker самостоятельно добавляет правила файрвола, поэтому опубликованные порты становятся доступны извне без отдельной настройки UFW или firewalld. О настройке ограничений доступа к портам контейнеров читайте в официальной документации Docker.
После базовой настройки Dockhand можно использовать как удобную веб-панель для локального Docker-сервера. Если подключить удалённые окружения, внешнюю аутентификацию и разграничение прав, Dockhand становится центральной точкой управления Docker-инфраструктурой для команды.
Если нужны другие варианты работы с Docker, используйте связанные рецепты и инструкции: