6
我知道使用docker-compose的舊版本,我們可以創建另一個只有數據卷的容器,並使用volumes_from將其鏈接爲「僅數據容器」。不過,我想用新的語法進行測試。如何創建docker-compose版本2以使用卷具有持久性postgres數據庫?
version: '2'
services:
app:
build: .
links:
- psql
psql:
image: postgres
volumes_from:
- psqldata
ports:
- "5432:5432"
psqldata:
image: postgres
volumes:
- psqlvolumes:/var/lib/postgresql/data/
volumes:
psqlvolumes:
driver: local
這是基於this post。
我有另一個腳本運行要等到Postgres的容器了其他容器,例如運行之前:
container:
build: .
volumes:
- ./scripts/wait-for-postgres.sh:/code/wait-for-postgres.sh
entrypoint: ./wait-for-postgres.sh "command"
與腳本看起來像:
#!/bin/bash
set -e
export PGPASSWORD=postgres
cmd="[email protected]"
until psql -h "postgres" -U "postgres" -c '\l'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec $cmd
這從拍攝碼頭網站。
這隻會導致容器停滯不前,根本無法獲得postgres容器來初始化我需要的表。
我明白了!但是如果在我想啓動其他容器之前需要在我的燒瓶應用上設置遷移,該怎麼辦?在另一個腳本'wait-for-flask.sh'中我做了 '''直到psql -h「postgres」-U「postgres」-c'SELECT * FROM this_table;';做 >&2回聲「的Postgres是不可用的 - 睡覺」 睡眠1 done''' 這一直是我已經能夠運行讓我的其他容器遷移在蒸餾器之前完成的唯一途徑。任何想法如何我能夠克服這一點? –
另外,我認爲像「鏈接」,「依賴」並不真正擔心它是否漲起,就好像它的開始。例如,它只關心postgres容器已啓動但尚未準備好啓動。那是錯的@waterscar? –
@JosephSong你說得對,depends_on不會等到服務準備就緒,所以你需要腳本來檢查它。你需要把這個檢查腳本放到所有'depends_on' postgres容器的應用程序容器中,以確保它等到遷移完成。 – waterscar