在 Azure 容器实例上部署 Postgres 数据库?

Deploying Postgres database on azure Container Instance?

我正在尝试在 Azure 容器实例上部署 PostgresDatabase。 要使用绑定挂载在 docker 上部署(因为 Azure 容器实例仅支持绑定挂载),我使用以下命令,并将其部署在 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 ... 

在容器重新启动的情况下,卷装载需要有数据。

这是将 Azure 文件共享装载到 Azure 容器实例的已知错误。目前不支持改变挂载点的归属。如果不想使用其他服务,则需要创建脚本将数据移动到挂载点,挂载点应该是镜像中不存在的新文件夹。对你来说,挂载点/var/lib/postgresql/data存在于镜像中,并且包含Postgresql依赖的文件,那么这个点不能作为挂载点。