Это потому, что когда muracms
запускается, svc_muradb
все еще не заканчивает свою инициализацию.
depends_on
просто гарантирует, что svc_muradb
сначала запустится, а затем запустится muracms
.Но процесс запуска svc_muradb
является асинхронным.Поэтому, прежде чем svc_muradb
будет готов, ваш muracms
уже может подключиться к БД.
Эта проблема описана в официальном руководстве , в котором предлагается написать оболочку для svc_muradb
command.
Как показано ниже, я просто привожу вам пример:
docker-compose.yml:
version: "2"
services:
web:
build: .
ports:
- "80:8000"
depends_on:
- "db"
command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
db:
image: postgres
wait-for-it.sh:
#!/bin/sh
# wait-for-postgres.sh
set -e
host="$1"
shift
cmd="$@"
until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$host" -U "postgres" -c '\q'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec $cmd
При описанном выше обходном пути веб-контейнер запустится wait-for-it.sh
, и сначала он попытается связать свой контейнер зависимостей db:5432
, только после подтвержденияможете связать с базой данных с помощью psql client
, тогда она запустит настоящую команду python app.py
.
Со своей стороны вам нужно изменить относящиеся к mysql client test
, тогда все в порядке.