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, 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»