Local DNS for Docker Containers using Pi-hole + Portainer + Nginx Proxy Manager - оригинальная статья на основе которой разбирался как настроить локальное управление доменами.
Развертывание Nginx Proxy Manager
Создаем docker-compose.yml файл:
services:
nginx-proxy-manager:
container_name: nginx-proxy-manager
image: "jc21/nginx-proxy-manager:latest"
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "81:81"
volumes:
- data:/data
- letsencrypt:/etc/letsencrypt
networks:
- nginx-proxy-network
networks:
nginx-proxy-network:
name: nginx-proxy-network
volumes:
data:
letsencrypt:
9 строку после настройки Nginx Proxy Manager можно будет удалить или закомментировать, так как доступ будет предоставляться уже по доменному имени.
Запускаем:
docker-compose up --build -dЗаходим на localhost:81 (или <ip>:81, если разворачиваете на удаленном сервере).
Вводим дефолтный логин/пароль:
Email: admin@example.com
Password: changeme
После входа приложение сразу же предложит поменять на свои значения.
Подготавка примера для тестирования
Tip
Этот шаг можно пропустить, если доступа к контейнеру
nginx-proxy-managerпо доменному имени вам будет достаточно. Это пример нужен лишь для того, чтобы показать, что контейнерnginx-proxy-managerдолжен быть связан общей сетью c теми контейнерами на которые он ссылается.
Возьмем контейнер nginx как пример для тестирования установки домена доступного с хоста на котором работает docker.
Создаем docker-compose.yml файл:
services:
nginx:
container_name: nginx
image: nginx
volumes:
- ./index.html:/usr/share/nginx/html/index.html
networks:
- nginx-proxy-network
networks:
nginx-proxy-network:
name: nginx-proxy-network
external: trueСоздадим папку со страницей отображаемой в nginx:
echo "Hello, World!" > ./index.htmlЗапускаем:
docker-compose up --build -dНастройка Nginx Proxy Manager
Теперь мы можем задать домен для этого контейнера и для тестового контейнера. Перейдем в Hosts -> Proxy Hosts:

Tip
В моем случае домен верхнего уровня является
.ziq, но вы можете указать любой другой. Чаще всего используется.testБудьте осторожнее с доменами.localи.dev, так как они часто резервируются браузерами.
И создадим две записи:


Обратите внимание, что мы используем встроенный dns resolver в docker, чтобы разрешать имена из основного контейнера nginx-proxy-manager, который доступен по портам 80 и 443. И возможно это из за того, что они связаны общей сетью nginx-proxy-network.
Теперь вам следует настроить dns сервер так, чтобы он отправлял при запросе этих адресов на сервер, где развернуты эти контейнеры или на 127.0.0.1, если это требуется только для этого же хоста.
Ссылки
GitHub - pi-hole/docker-pi-hole: Pi-hole in a docker container
Local DNS for Docker Containers using Pi-hole + Portainer + Nginx Proxy Manager
Альтернатива: