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

yat*_*ena 6 postgresql azure azure-container-instances

我正在尝试在 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
Run Code Online (Sandbox Code Playgroud)

我在 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 ... 
Run Code Online (Sandbox Code Playgroud)

容器重启时需要 Volume Mount 来保存数据。

Cha*_* Xu 6

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

  • @marital_weeping - 虽然这在测试期间有效,但我们没有进一步追求 Azure 容器实例并切换到 Amazon ECS。 (2认同)
  • 这个答案到2023年还有效吗?:) 有同样的问题。 (2认同)