Portainer и способы подключения внешних Docker-хостов
Portainer позволяет добавлять в свою панель не только локальный Docker-демон, но и удалённые Docker-хосты. Способы интеграции бывают разные — часть из них предназначена для Docker Swarm, Kubernetes или Podman, но мы рассмотрим лишь два метода, актуальных для классического Docker и Docker Compose:
- Прямое подключение к Docker API по TCP.
- Использование Portainer Agent.
Разберём каждый метод подробнее.
1. Подключение по Docker API
При таком подходе Portainer напрямую обращается к Docker-демону на удалённом сервере через HTTP(S). Docker-демон должен слушать TCP-порт 2375 (без TLS) или 2376 (с TLS), а Portainer при добавлении эндпоинта указывает соответствующий адрес.
Настройка на хосте
Откройте файл конфигурации Docker-демона:
sudo nano /etc/docker/daemon.json
Добавьте блок hosts:
Без TLS (все запросы открыты):
{
"hosts": [
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2375"
]
}
С TLS (шифрование трафика):
{
"tlsverify": true,
"tlscacert": "/path/to/ca.pem",
"tlscert": "/path/to/server-cert.pem",
"tlskey": "/path/to/server-key.pem",
"hosts": [
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2376"
]
}
Перезапустите Docker:
sudo systemctl restart docker
🔒 Важно: если вы отключаете TLS-шифрование, обязательно настройте firewall так, чтобы доступ к порту был только с доверенных IP-адресов. Иначе любой сможет управлять вашим Docker.
Плюсы и минусы
| Плюсы | Минусы |
|---|---|
| • Не требуется дополнительное ПО на хосте — только сам Docker-демон. | • Настройка TLS и ротация сертификатов добавляют сложность. |
| • Прямой «родной» API-доступ без прокси. | • Без надёжного шифрования и firewall — уязвимость для посторонних. |