Estoy configurando un script para configurar entornos Docker para máquinas locales de desarrolladores. Una parte específica del script consiste en crear un contenedor temporal con un volumen local para configurar la base de datos que usaré en el próximo paso. este es el código usado en el script:
docker run -d --name mysql_temp -v ~/dev/mysql:/var/lib/mysql/data -e MYSQL_ROOT_PASSWORD=test -p 3306:3306 centos/mysql-57-centos7:latest
el siguiente paso en el script es esta línea:
mysql -u root -h 127.0.0.1 --protocol=tcp --password=test -e "CREATE DATABASE db_test;"
entonces, el script me devuelve este error:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2
Curiosamente, si fuerzo la salida con el comando exit después del primer comando y ejecuto el segundo a mano, directamente en la terminal, funciona y me crea la base de datos.
¿Alguna idea de qué está pasando esto?
gracias de antemano,
En su secuencia de comandos, cuando se ejecuta la primera línea, crea el contenedor docker. Pero lleva tiempo inicializar el servidor mysql en el contenedor. El script ejecuta la segunda línea sin esperar a que mysql se inicialice. Por lo tanto, no se puede conectar.
Supongo que ha escrito un script de shell. Pruebe el siguiente script.
docker run -d --name mysql_temp -v ~/dev/mysql:/var/lib/mysql/data -e MYSQL_ROOT_PASSWORD=test -p 3306:3306 centos/mysql-57-centos7:latest sleep 10 mysql -u root -h localhost --protocol=tcp -ptest -e "CREATE DATABASE db_test;"Tenga en cuenta que la segunda línea tiene sleep 10. Básicamente, esto creará un retraso de 10 segundos antes de ejecutar el siguiente comando. Intente variar el tiempo de sueño a uno más alto si aún no funciona.
También cambie 127.0.0.1 a localhost y --password=test a -ptest
Nota: Dijiste que si sales del script y ejecutas el comando mysql manualmente, funciona. Eso es porque cuando intentaste ejecutarlo manualmente, el contenedor ya había inicializado mysql. Intente ejecutar el comando docker run en una ventana de terminal. Una vez que se inicia el contenedor, intente ejecutar el comando mysql inmediatamente en otra ventana de terminal para ver si funciona tan rápido como esperaba.