Мне нужно использовать точку входа, чтобы определить, доступна ли база данных и существует ли таблица.
Я использую следующую оболочку, чтобы определить, существует ли таблица
Часть Содержимое dockerfile
ENTRYPOINT ["bash","docker-entrypoint.sh"]
Содержимое сценария оболочки
until PGPASSWORD=postgres psql -h "db" -U "postgres" -c '\q'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
# Prepare variables
TABLE=web_user
SQL_EXISTS=$(printf '\dt "%s"' "$TABLE")
# Credentials
USERNAME=postgres
PASSWORD=postgres
DATABASE=postgres
echo "Checking if table <$TABLE> exists ..."
# Check if table exists
PGPASSWORD="$PASSWORD" psql -h "db" -U $USERNAME -d $DATABASE -c "$SQL_EXISTS"
# using #!/bin/bash
if [[ $(PGPASSWORD="$PASSWORD" psql -h "db" -U $USERNAME -d $DATABASE -c "$SQL_EXISTS") ]]
then
echo "Table exists ..."
else
echo "Table not exists ..., init database"
python3 manage.py makemigrations web
python3 manage.py migrate
fi
db
- это service name
контейнера postgres в compose
Я хочу, чтобы контейнер запускался впервые, определите, что пользовательская таблица не существует, затем create a new database
, а затем перезапустите контейнер, чтобы найти, что пользовательская таблица уже существует. существует without creating a new data table
Но когда я использую его на базовом образе Ubuntu16.04, он просто выводит table exists...
при первом запуске контейнера
psql: FATAL: the database system is starting up
Postgres is unavailable - sleeping
Checking if table <web_user> exists ...
No matching relations found.
Table exists ...
Но я ожидаю, что print table not exists..., the init database
и последующие команды
Вывод с использованием базового изображения python alpine
выглядит следующим образом
Checking if table <web_user> exists ...
Did not find any relation named ""web_user"".
Table not exists ..., init database
Migrations for 'web':
Разница заключается в следующем:
No matching relations found.
основано на вывод ubuntu image
,
Did not find any relation named ""web_user"".
на основе вывода python:3.6.9-alpine image
Почему это не другая часть, которая идет?
Буду признателен, если вы подскажете, почему произошла эта ошибка и как ее исправить?