Existe uma maneira de fazer esses dois comandos bash do docker executarem de forma síncrona?

3

Estou automatizando a configuração de ambientes dev para meu aplicativo e quando executo esses dois comandos manualmente a partir da linha de comando, tenho que esperar cerca de 10 segundos depois de executar o primeiro para executar o segundo.

# command one (run the mysql docker container)
docker run -p 3306:3306 --name mysql-container-name -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=mydbname -d mysql:latest

# command two (import data into created db)
docker exec -i mysql-container-name mysql mydbname < ./dev-db.sql --password=secret

Estou tentando automatizar esses dois comandos em um alias bash para que eu possa fazer apenas db-setup , mas mesmo quando eu separar os comandos com o & & o segundo comando é executado muito rapidamente (antes que o container mysql esteja totalmente configurado aparentemente) porque eu recebo este erro:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Alguma ideia de como posso obter o segundo comando apenas quando o primeiro está completamente terminado com tudo o que ele precisa fazer?

    
por Brian FitzGerald 25.02.2016 / 07:01

1 resposta

3

Se um shell script for aceitável, talvez a maneira mais fácil seja tentar o upload, aguarde 5 segundos e tente o upload novamente até que ele funcione. Algo parecido com isto:

docker run -p 3306:3306 --name mysql-container-name -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=mydbname -d mysql:latest
until [docker exec -i mysql-container-name mysql mydbname < ./dev-db.sql --password=secret]
    do
    sleep 5
    done
    
por 25.02.2016 / 09:00