Al implementar Nginx Proxy Manager en Docker o Docker compose tenemos que asegurar que acceda a los contenedores / servicios implementados usando una dirección local para evitar salir por la pública si la conexión no es SSL internamente. De esta forma evitaremos que el tráfico no cifrado salga al exterior.
Lo primero que tenemos que hacer es unir los contenedores Docker en el archivo de Docker Compose añadiendo link:
version: "3.1"
services:
miservicio_mysql:
image: biarms/mysql:5.7
env_file:
- ./Dockerfile/mysql.env
container_name: mysql_container
command: --max_allowed_packet=67108864
environment:
MYSQL_DATABASE: "db"
MYSQL_USER: "user"
MYSQL_PASSWORD: "pass_user"
# Password for root access
MYSQL_ROOT_PASSWORD: "pass_root"
volumes:
# Montamos un volumen para MySQL para no perder los datos de bd
- ./mysql:/var/lib/mysql
expose:
- 3306
ports:
- 3306:3306
networks:
- docker-network
miservicio_php:
build:
context: ./Dockerfile
dockerfile: php_file
env_file:
- ./Dockerfile/php.env
container_name: php_container
volumes:
- ./www/:/var/www/html
- ./logs/apache:/var/log/apache2
expose:
- 80
- 443
ports:
- 8000:80
- 442:443
links:
- miservicio_mysql
networks:
- docker-network
adminer:
image: adminer
restart: always
ports:
- 8080:8080
links:
- miservicio_mysql:db
networks:
- docker-network
nginxproxymanager:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
#usuario defecto:
#Email: admin@example.com
#Password: changeme
volumes:
- ./config/proxymanager/data:/data
- ./config/letsencrypt:/etc/letsencrypt
networks:
- docker-network
links:
- miservicio_mysql
- miservicio_php
- adminer
networks:
docker-network:
driver: bridge
Como veis en el ejemplo que he añadido links en el contenedor nginxproxymanager :
- miservicio_mysql - miservicio_php - adminer
De esta forma nginxproxymanager puede acceder a estos contenedores localmente.
Además, los he unido por una red docker llamada docker-network
Ahora, en Nginx Proxy Manager, iniciamos sesión y vamos a los proxys:

Ahora añadimos o editamos uno y ponemos el nombre del contenedor (vale tanto el que ponemos en raíz o dentro de la etiqueta container_name) en vez de la IP:

Y muy importante, recuerda que tendrás que poner el puerto del servicio original en tu docker y no el expuesto, es decir, el puerto de la derecha dentro de ports de tus contenedores docker compose.
ports:
- 8000:80
- 442:443

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.
1 comentario en «Añadir direcciones locales en Nginx Proxy Manager usando dominios de contenedores Docker en Docker Compose»