Мы достигли этого с помощью пользовательского ENTRYPOINT
в нашем образе Docker.
Это сценарий оболочки, который используется в качестве точки входа. Он содержит некоторый код Python для проверки работоспособности базы данных, но он должен быть похож на PHP. Сценарий зацикливается до тех пор, пока не сможет успешно подключиться к базе данных, и после этого (в строке exec
) запускает CMD
из файла Dockerfile.
#!/bin/bash
set -e
function db_ready(){
python << END
import sys
import sqlalchemy
try:
engine_pro = sqlalchemy.create_engine("${DATABASE}").connect()
except (sqlalchemy.exc.SQLAlchemyError, sqlalchemy.exc.DBAPIError) as e:
print('Error:', e)
sys.exit(-1)
sys.exit(0)
END
}
until db_ready; do
>&2 echo 'Waiting for database to become available...'
sleep 1
done
>&2 echo 'Database is available'
exec "$@"
Вам нужно сохранить этот скрипт в файле и установить его как entrypoint
для службы test
в docker-compose.yml
.