Añadir direcciones locales en Nginx Proxy Manager usando dominios de contenedores Docker en Docker Compose

Tiempo de lectura: 2 minutos

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

Deja un comentario