什么是同步docker数据库容器的Python脚本的最佳方式?

我正在尝试使用docker-compose在一个容器中运行一个python脚本,该容器在单独的容器中填充数据库。 我的问题是脚本在数据库准备好接受连接之前启动。 有没有办法避免这种情况,仍然使用docker-compose

我的另一种select是创build一个shell脚本,可以顺序触发每个docker容器命令,但如果可能的话,我宁愿使用docker-compose

这是docker-compose.yml文件:

 etl: build: ./etl links: - mysql mysql: image: mariadb environment: MYSQL_DATABASE: my_db MYSQL_ROOT_PASSWORD: a_password 

这是我的解决方法shell脚本:

 #!/bin/bash docker run --name mariadb -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb:latest docker build -t etl ./etl docker run -it --rm -name my-etl --link mariadb:mysql etl 

在启动脚本之前,您可以让etlt容器进入睡眠状态
docker run -it --rm -name my-etl --link mariadb:mysql etl /bin/bash -c "sleep 10 && python your-script"

或在Dockerfile中

CMD ["/bin/bash", "-c", "sleep 10 && python your-script"]

这样,etl容器在启动python脚本之前会hibernate10秒钟。

固定sleep 10是一种select。

另一种方法是让etl代码重试连接几次,每次尝试(〜1s)之间的睡眠时间较短。 当连接成功时你知道容器已经准备就绪,所以脚本可以继续。

通过连续多次尝试连接,睡眠时间更短,平均等待时间更短。