Saltar al contenido

docker-compose con múltiples bases de datos

Solución:

Varias bases de datos en un solo contenedor de Docker

Las respuestas en otras partes de esta página configuran un contenedor dedicado para cada base de datos, pero un solo servidor MySQL es capaz de albergar múltiples bases de datos. Si debería hacerlo es una pregunta diferente, pero si desea varias bases de datos en un solo contenedor, aquí tiene un ejemplo.

docker-compose.yml:

version: '3'

volumes:
  db:
    driver: local

  services:
    db:
      image: mysql:5.7
      command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
      volumes:
        - ./docker/provision/mysql/init:/docker-entrypoint-initdb.d
      environment:
        MYSQL_ROOT_PASSWORD: local

docker / provision / mysql / init / 01 -bases.sql:

# create databases
CREATE DATABASE IF NOT EXISTS `primary`;
CREATE DATABASE IF NOT EXISTS `secondary`;

# create root user and grant rights
CREATE USER 'root'@'localhost' IDENTIFIED BY 'local';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

¿Como funciona esto?

Esto funciona porque el proyecto MySQL Docker tiene un script de punto de entrada que se ejecutará a través de todos los archivos en el /docker-entrypoint-initdb.d carpeta, si existe. Esto es útil para configurar bases de datos e inicializar su esquema y datos. En docker-compose, estamos usando volumes para asignar esa carpeta virtual a una carpeta en el sistema host.

Está intentando vincular ambos contenedores de la base de datos al mismo puerto: 3306. Lo que es esencialmente imposible. Necesita cambiar la asignación de puertos para una de las bases de datos, por ejemplo mysql mantiene 3306:3306, y mysql2 debería usar 3307:3306.

Solo como una actualización para cualquier otra persona que pueda investigar esto.

Resolví esto eliminando:

MYSQL_DATABASE: dbname 

de docker-compose.yml y agregar las declaraciones de creación de base de datos relevantes directamente al archivo sql que se pasa a docker-entrypoint-initdb.d.

En esa etapa, los comandos sql se realizan en root, por lo que también deberá agregar una declaración para otorgar permisos relevantes al usuario de la base de datos que desea usar.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *