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 migrateObtengo 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 refusedPero, 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.
Puede comenzar desde la ventana acoplable de imágenes "mysql"
FROM mysqlSi 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-toolsConfigurar mysql
ENV MYSQL_DATABASE=mydb ENV MYSQL_ROOT_PASSWORD=rootAñadir ruta migratoria
ADD flyway /opt/flywayAgregar migraciones
ADD sql /opt/flyway/sqlAgregar ruta de configuración
ADD config /opt/flyway/confAgregar secuencia de comandos para comenzar
ADD start /root/start.shCompruebe iniciar mysql
RUN netstat -ntlpComprobar la versión de Java
RUN java -versionArchivo 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=rootArchivo 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.shetc ...
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-mysqlmkdir ./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 -despera 2 minutos
docker-compose run supermonk-flywayReferencia: