簡體   English   中英

將python腳本與docker數據庫容器同步的最佳方法是什么?

[英]What's the best way to synchronize a python script with a docker database container?

我正在嘗試使用docker-compose在一個容器中運行python腳本,該容器將數據庫填充到單獨的容器中。 我的問題是腳本在數據庫准備好接受連接之前啟動。 有沒有辦法避免這種情況並且仍然使用docker-compose

我的另一種選擇是創建一個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

您可以在啟動腳本之前讓etl容器休眠,即
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腳本之前休眠10秒鍾。

固定sleep 10是一種選擇。

另一個方法是讓etl代碼重試幾次連接,每次嘗試之間的睡眠時間較短(〜1s)。 連接成功后,您知道容器已准備就緒,因此腳本可以繼續進行。

通過嘗試多次連接並縮短睡眠時間,平均可以減少等待時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM