您好,我是 Azure 新手,我需要将 Postgres DB 部署到 Azure 容器应用程序。我知道在容器化环境中托管数据库不是一个好的做法。
我关注了这个link从 Microsoft 文档中部署应用程序,以下是我的配置,
我创建了一个 VNET,因为我需要选择 TCP 作为入口类型,并将目标端口和公开端口映射为 5432 到 5432
部署应用程序并尝试使用 Pgadmin 连接到数据库后,出现以下错误。
我想确保 Postgres DB 在 Azure 容器应用程序内成功运行,并且需要从 Pgadmin 进行连接。
最佳答案
这里有两个问题:
- 您的应用定义不正确(尤其是“命令覆盖”方面)
- 您可以修复该部分并且 Postgres 将启动,但您将遇到持久存储问题。 Azure ContainerApps 目前仅支持 AzureFiles SMB shares用于持久存储。然而,Postgres requires hardlinks和 AzureFiles SMB doesn't support hardlinks 。因此您将无法安装适用于 postgres 的持久存储。一旦 ContainerApps 可以挂载 AzureFiles NFS 共享,这就会起作用。
关于第一个问题,“命令覆盖”是为了覆盖在 docker 镜像中运行的命令,而不是 docker 命令本身。
因此这些值需要放入下面的环境变量部分:
喜欢:
或使用 azure cli
az containerapp create \
--name $POSTGRES_INSTANCE_NAME \
--resource-group $RESOURCE_GROUP \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image docker.io/postgres:15 \
--secrets pgpass="$POSTGRES_PASSWORD" \
--env-vars POSTGRES_USER="$POSTGRES_USER" POSTGRES_DB="$POSTGRES_DB" POSTGRES_PASSWORD=secretref:pgpass \
--transport tcp \
--target-port 5432 \
--ingress external \
--min-replicas 1 \
--max-replicas 1
您可以将 --ingress external
更改为 --ingress inside
,然后在同一环境中部署 pgadmin。然后 pgadmin 应该能够访问 $POSTGRES_INSTANCE_NAME:5432
部署 pgadmin
az containerapp create \
--name pgadmin \
--resource-group $RESOURCE_GROUP \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dpage/pgadmin4:6.15 \
--secrets pgpass="$PGADMIN_PASSWORD" \
--env-vars PGADMIN_DEFAULT_EMAIL="$PGADMIN_EMAIL" PGADMIN_LISTEN_PORT="8080" PGADMIN_DEFAULT_PASSWORD=secretref:pgpass \
--transport http \
--target-port 8080 \
--ingress external \
--min-replicas 1 \
--max-replicas 1
关于postgresql - 在Azure容器应用程序中部署Postgres DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74519483/