Portainer показывает контейнеры, образы, тома и логи в браузере и позволяет запускать стеки Compose без терминала. Бесплатная версия называется Community Edition (CE).
Установка
Порт интерфейса публикуем только на 127.0.0.1 — снаружи он будет недоступен:
$ docker volume create portainer_data$ docker run -d --name portainer --restart=always \ -p 127.0.0.1:9443:9443 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:ltsВход через SSH-туннель
На своём компьютере пробросьте порт через SSH и оставьте окно открытым:
$ ssh -N -L 9443:127.0.0.1:9443 [email protected]Откройте https://localhost:9443. Браузер предупредит о самоподписанном сертификате — для туннеля это нормально. Сразу создайте администратора с длинным паролем.
Вариант: доступ только с вашего IP
Если нужен постоянный доступ без туннеля и у вас статический адрес, опубликуйте порт на всех интерфейсах (-p 9443:9443) и ограничьте его в цепочке DOCKER-USER — правила UFW к портам Docker не применяются:
$ iptables -I DOCKER-USER -p tcp -m conntrack --ctorigdstport 9443 ! -s 198.51.100.7 -j DROPЗдесь 198.51.100.7 — ваш адрес. Правило не переживает перезагрузку; для постоянного хранения нужен пакет iptables-persistent. Туннель проще и надёжнее.
Проверьте результат
$ docker ps --filter name=portainer$ ss -tlnp | grep 9443В выводе ss порт должен слушаться на 127.0.0.1:9443, а не на 0.0.0.0.
Частые ошибки
- Интерфейс открыт на 0.0.0.0:9443 — UFW его не закрывает. Пересоздайте контейнер с -p 127.0.0.1:9443:9443.
- Туннель обрывается при закрытии терминала — это ожидаемо. Для постоянного туннеля используйте autossh (см. статью про SSH-туннели).