#postgresql #azure #azure-container-instances
#postgresql #azure #azure-container-instances
Вопрос:
Я пытаюсь развернуть базу данных PostgresDatabase в экземпляре контейнера Azure. Для развертывания в docker с использованием bind mount (поскольку экземпляр контейнера Azure поддерживает только bind mount) я использую приведенную ниже команду, и она развертывается в docker. docker run -d -p 5434:5432 --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -e PGDATA=/var/lib/postgresql/data/pgdata -v /home/ubuntu/volum:/var/lib/postgresql/data postgres
Если я сделаю что-то подобное для развертывания в экземпляре контейнера Azure
az container create
--resource-group $ACI_PERS_RESOURCE_GROUP
--name postgreariesdb25-1
--location eastus
--image postgres
--dns-name-label $ACI_DNS_LABEL
--environment-variables POSTGRES_PASSWORD=mysecretpassword PGDATA=/var/lib/postgresql/data/pgdata
--ports 5432
--azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME
--azure-file-volume-account-key $STORAGE_KEY
--azure-file-volume-share-name $ACI_PERS_SHARE_NAME
--azure-file-volume-mount-path /var/lib/postgresql/data
Я получаю сообщение ниже внутри журналов контейнера Azure
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data/pgdata ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 20
selecting default shared_buffers ... 400kB
selecting default time zone ... Etc/UTC
creating configuration files ... ok
2020-11-24 05:23:39.218 UTC [85] FATAL: data directory "/var/lib/postgresql/data/pgdata" has wrong ownership
2020-11-24 05:23:39.218 UTC [85] HINT: The server must be started by the user that owns the data directory.
child process exited with exit code 1
initdb: removing contents of data directory "/var/lib/postgresql/data/pgdata"
running bootstrap script ...
Требуется подключение тома для хранения данных в случае перезапуска контейнера.
Комментарии:
1. Экземпляры контейнеров в основном подходят для краткосрочных операций, не развертывайте базу данных с помощью ACI
2. Есть какие-либо обновления по этому вопросу? Решает ли это вашу проблему?
3. Еще нет, пробовали Azure Database для сервера PostgreSQL, но при ее использовании возникает другая проблема
4. Что вы имеете в виду, пытаясь использовать базу данных Azure для сервера PostgreSQL? Ваш вопрос касается развертывания базы данных Postgresql в ACI.
Ответ №1:
Это известная ошибка при подключении общего файлового ресурса Azure к экземпляру контейнера Azure. В настоящее время он не поддерживает изменение владельца точки монтирования. Если вы не хотите использовать другие сервисы, вам необходимо создать сценарий для перемещения данных в точку монтирования, а точкой монтирования должна быть новая папка, которой не существует в образе. Для вас точка монтирования /var/lib/postgresql/data
существует в образе и содержит файлы, от которых зависит Postgresql, тогда эта точка не может быть точкой монтирования.
Комментарии:
1. Спасибо, изменение точки монтирования на что-то случайное, например
/var/lib/postgresql/foobar
, сработало для меня.2. @Jensen поддерживает ли ваш подход сохранение базы данных в вашем местоположении общего доступа к данным? Мои тесты показывают, что изменение точки монтирования
/var/lib/postgresql/foobar
приведет к тому, что общий файловый ресурс опустеет. Чего мне не хватает?3. Чарльз Сюй, не могли бы вы подробнее изложить свое предложение выше? Где бы мы создали сценарий для перемещения? Спасибо!
4. @marital_weeping — Хотя это работало во время тестирования, мы не стали продолжать использовать экземпляры контейнеров Azure и переключились на Amazon ECS.