postgresql - 在Azure容器应用程序中部署Postgres DB

标签 postgresql azure docker pgadmin-4 azure-container-apps

您好,我是 Azure 新手,我需要将 Postgres DB 部署到 Azure 容器应用程序。我知道在容器化环境中托管数据库不是一个好的做法。

我关注了这个link从 Microsoft 文档中部署应用程序,以下是我的配置,

enter image description here

我创建了一个 VNET,因为我需要选择 TCP 作为入口类型,并将目标端口和公开端口映射为 5432 到 5432

enter image description here

部署应用程序并尝试使用 Pgadmin 连接到数据库后,出现以下错误。

enter image description here

我想确保 Postgres DB 在 Azure 容器应用程序内成功运行,并且需要从 Pgadmin 进行连接。

最佳答案

这里有两个问题:

  • 您的应用定义不正确(尤其是“命令覆盖”方面)
  • 您可以修复该部分并且 Postgres 将启动,但您将遇到持久存储问题。 Azure ContainerApps 目前仅支持 AzureFiles SMB shares用于持久存储。然而,Postgres requires hardlinksAzureFiles SMB doesn't support hardlinks 。因此您将无法安装适用于 postgres 的持久存储。一旦 ContainerApps 可以挂载 AzureFiles NFS 共享,这就会起作用。

关于第一个问题,“命令覆盖”是为了覆盖在 docker 镜像中运行的命令,而不是 docker 命令本身。

因此这些值需要放入下面的环境变量部分:

喜欢:

enter image description here

或使用 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

上的 postgres

部署 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/

相关文章:

python - NGINX 不与 flask rest API 通信。 docker

django - 在哪里存储 Django 应用程序的媒体文件以便在 docker 容器更新后保存它们?

android - 如何在继续运行 docker 的同时启动 AVD

c - 类型转换。我如何处理 C 中 libpq 中的 PostgreSQL OID 值?

PostgreSQL:pg_dump:[archiver (db)] 连接到数据库 "dbase"失败:致命:用户 "postgres"的对等身份验证失败

azure - ADF - 如何比较具有相同结构的两个 Azure SQL 数据库表(A 和 B)并仅将缺失值从表 A 插入到表 B

Azure docker : linuxFxVersion vs DOCKER_CUSTOM_IMAGE_NAME

postgresql - 空闲的 postgres 进程占用大量内存

java - 通过 Java Runtime.getruntime.exec() 调用 postgres 命令

azure - 我的带有队列触发器的 Azure 函数应用程序未按应用程序服务计划进行扩展