Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

411
Views
Agregar Flyway a un contenedor MySQL Docker

Estoy creando un derivado de este contenedor Docker para mysql (usándolo como punto de partida): https://github.com/docker-library/mysql

He modificado el Dockerfile para agregar Flyway. Todo está configurado para editar el archivo de configuración para conectarse a la instancia de base de datos local, etc. La intención es llamar a este comando desde https://github.com/docker-library/mysql/blob/master/5.7/docker-entrypoint.sh archivo (que se ejecuta como ENTRYPOINT) alrededor de la línea 186:

 flyway migrate

Obtengo una conexión rechazada cuando esto se ejecuta desde dentro del script de shell:

 Flyway 4.1.2 by Boxfuse ERROR: Unable to obtain Jdbc connection from DataSource (jdbc:mysql://localhost:3306/db-name) for user 'root': Could not connect to address=(host=localhost)(port=3306)(type=master) : Connection refused ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL State : 08 Error Code : -1 Message : Could not connect to address=(host=localhost)(port=3306)(type=master) : Connection refused

Pero, si elimino el comando del script de shell, reconstruyo e inicio sesión en el contenedor, y ejecuto el mismo comando manualmente, funciona sin problemas.

Sospecho que puede haber algunas diferencias en la forma en que el script se conecta a la base de datos para hacer su trabajo (tiene un "corredor" SQL incorporado), pero parece que no puedo encontrarlo. El contenedor reinicia el servidor durante el proceso, que es lo que puede ser la diferencia aquí.

Dado que este contenedor está diseñado para el desarrollo, una alternativa (una solución, en realidad) es usar el "corredor" de SQL incorporado para este contenedor, usando el formato de nombre de archivo que Flyway espera, luego use Flyway para administrar las versiones de la base de datos de producción.

Gracias de antemano por cualquier ayuda.

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Quiero decir que es la buena manera de comenzar desde la imagen lista (para comenzar).

  • Puede comenzar desde la ventana acoplable de imágenes "mysql"

     FROM mysql

    Si inicia la imagen terminada, al crear una nueva versión, su ventana acoplable solo actualizará la diferencia.

  • A continuación, paso, puede instalar java y net-tools

     RUN apt-get -y install apt-utils openjdk-8-jdk net-tools
  • Configurar mysql

     ENV MYSQL_DATABASE=mydb ENV MYSQL_ROOT_PASSWORD=root
  • Añadir ruta migratoria

     ADD flyway /opt/flyway
  • Agregar migraciones

     ADD sql /opt/flyway/sql
  • Agregar ruta de configuración

     ADD config /opt/flyway/conf
  • Agregar secuencia de comandos para comenzar

     ADD start /root/start.sh
  • Compruebe iniciar mysql

     RUN netstat -ntlp
  • Comprobar la versión de Java

     RUN java -version

Archivo de ejemplo: /opt/flyway/conf/flyway.conf

 flyway.driver=com.mysql.jdbc.Driver flyway.url=jdbc:mysql://localhost:3306/mydb flyway.user=root flyway.password=root

Archivo de ejemplo: start.sh

 #!/bin/bash cd /opt/flyway flyway migrate # may change to start.sh to start product migration or development.

Documentación de rutas migratorias

Quiero decir que en el siguiente paso puede usar flyway como servicio:

Por ejemplo:

 docker run -it -p 3307:3306 my_docker_flyway /root/start << migration_prod.sh docker run -it -p 3308:3306 my_docker_flayway /root/start << migration_dev.sh

etc ...

about 4 years ago · Santiago Trujillo Report

0

services: # Standard Mysql Box, we have to add tricky things else logging by workbench is hard supermonk-mysql: image: mysql command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci environment: - MYSQL_ROOT_PASSWORD=P@ssw0rd - MYSQL_ROOT_HOST=% - MYSQL_DATABASE=test ports: - "3306:3306" healthcheck: test: ["CMD-SHELL", "nc -z 127.0.0.1 3306 || exit 1"] interval: 1m30s timeout: 60s retries: 6 # Flyway is best for mysql schema migration history. supermonk-flyway: container_name: supermonk-flyway image: boxfuse/flyway command: -url=jdbc:mysql://supermonk-mysql:3306/test?verifyServerCertificate=false&useSSL=true -schemas=test -user=root -password=P@ssw0rd migrate volumes: - "./sql:/flyway/sql" depends_on: - supermonk-mysql

mkdir ./sql vi ./sql/V1.1__Init.sql # y péguelo debajo

 CREATE TABLE IF NOT EXISTS test.USER ( id VARCHAR(64), fname VARCHAR(256), lname VARCHAR(256), CONSTRAINT pk PRIMARY KEY (id));

guardar y cerrar

 docker-compose up -d

espera 2 minutos

 docker-compose run supermonk-flyway

Referencia:

  1. https://github.com/supermonk/webapp/tree/branch-1/docker/docker-database
  2. Gracias a la comunidad docker y a la comunidad mysql.
  3. docker-componer registros -f
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!