簡體   English   中英

shell 腳本在 bash 中運行 docker 鏡像,獲取 db dump 並將文件復制到主機

[英]shell script to run the docker image in bash, take db dump and copy file to the host

全新的 shell 腳本。 我想運行 sql 圖像(圖像只是為了進行數據庫轉儲)並使用 shell 腳本進行數據庫轉儲並將文件復制到主機。

我如何手動是

1) docker run -it <image_name> bash (this takes in image bash)
2) mysqldump -h <ip> -u <user> -p db > filename.sql
3) docker cp <containerId>:/file/path/within/container /host/path/target (running this in host machine)

這樣做我手動從容器到主機的轉儲。

但是在制作 shell 腳本時,我遇到了問題 1) docker run -it <image_name> bash(這需要圖像 bash),因為這會將我帶到 bash 並且我必須手動鍵入命令。

我怎么能在shell腳本中做到這一點。

任何幫助將不勝感激!

如果我理解正確,您不想手動鍵入這些命令,而 shell 腳本應該在容器啟動並運行時執行您的命令。 現在,如果您可以修改與 sql 相關的 Dockerfile 並可以重新創建映像,那么在啟動時使用 ENTRYPOINT [和如果需要 CMD] 來執行 shell 腳本。 檢查此鏈接以獲取有關ENTRYPOINT shell 腳本的詳細信息 否則,如果您無法重新創建圖像,請查看這篇文章,即如何從運行命令運行 bash 腳本

注意在這兩種情況下,您都必須掛載目錄/卷,並且您的 sqldump 命令應該復制轉儲此映射卷/目錄

忽略 Docker 步驟,只需在您的主機上運行mysqldump -h選項是運行數據庫的主機的 IP 地址或 DNS 名稱(如果容器在同一主機上運行,​​則可以是127.0.0.1 ,但不是localhost因為 MySQL 會誤解); 如果將數據庫外部端口映射到非默認端口,則還需要-P (大寫P )選項來指定該端口。

例如,如果您使用以下命令啟動容器

docker run -p 5433:5432 ... mysql:8

然后你可以從主機獲取轉儲

mysqldump -h 127.0.0.1 -P 5433 -p db > dump.sql

完全不用擔心 Docker 的細節。

您可以將命令作為參數傳遞給 Bash:

docker run -it <image_name> --name sqldump bash -c "mysqldump -h <ip> -u <user> -p db > /tmp/filename.sql"
docker cp sqldump:/tmp/filename.sql /path/on/host/filename.sql

暫無
暫無

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

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