我有 docker-compose.yml 檔案,我通過
docker-compose up -d db命令用 DB 啟動了一個容器。
我需要通過主機執行腳本,簡而言之,將轉儲匯出到容器中的資料庫。
所以,現在它看起來像:
docker-compose up -d db
./script.sh
但我想將這兩個命令合二為一。我的問題是“有可能嗎?”
我發現 Docker Compose 不支持此功能。我知道我可以創建另一個包含這些命令的腳本,但我只想離開
docker-compose up -d db
UPD:我想提一下我正在使用mcr.microsoft.com/mssql/server:2017-latest影像
另外,不得不再說一次,我需要在主機上完全執行腳本
uj5u.com熱心網友回復:
您不能使用 Docker 工具在主機系統上執行命令。圍繞 Docker 的一般設計要點是容器不應影響主機。
沒有什么能阻止您撰寫自己的 shell 腳本,該腳本在主機上運行并執行您需要的步驟:
#!/bin/sh
docker-compose -d up
./wait-for.sh localhost 1433
./script.sh
(該腳本與 Docker Compose 在啟動不依賴 Docker 健康檢查的Y 之前等待容器 Xwait-for.sh的答案中描述的相同。)
對于您的用例,可以在單獨的容器中運行資料匯入器。典型的設定可能如下所示;請注意,每次運行時都會運行匯入程式docker-compose up。您可能希望將其實際構建到單獨的影像中。
version: '3.8'
services:
db: { same: as you have currently }
importer:
image: mcr.microsoft.com/mssql/server:2017-latest
entrypoint: ./wait-for.sh db 1433 -- ./script.sh
workdir: /import
volumes: [.:/import]
開源資料庫容器通常也支持在/docker-entrypoint-initdb.d容器第一次啟動時將腳本放入其中,但 SQL Server 映像似乎不支持這一點;啟動 Docker 容器時如何恢復 SQL Server 資料庫?有一個復雜的設定來復制這種行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/447753.html
上一篇:xxd:如何在不添加“00000000:”的情況下簡單地還原?
下一篇:Bash回圈遍歷檔案末尾
