首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Azure容器应用程序中部署Postgres DB

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

Stack Overflow用户
提问于 2022-11-21 13:10:59
回答 1查看 47关注 0票数 1

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

我遵循了微软文档中的这个链接来部署应用程序,下面是我的配置,

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

在部署应用程序并尝试使用Pgadmin连接到DB之后,我将得到以下错误。

我希望确保Postgres在Azure Container中成功运行,并需要从Pgadmin连接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-21 21:44:38

这里有两个问题:

  • 您的应用程序定义不正确(特别是围绕“命令覆盖”)
  • 您可以修复该部分,Postgres将启动,但您将遇到一个持久的存储问题。Azure ContainerApps现在只支持用于持久存储的AzureFiles SMB股票。然而,Postgres需要硬链接AzureFiles SMB不支持硬链接。因此,您将无法挂载用于postgres的持久存储。一旦ContainerApps可以挂载AzureFiles NFS共享,这就可以工作了。

关于第一个问题,“命令覆盖”是为了覆盖在您的停靠库映像中运行的命令,而不是停靠器命令本身。

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

像这样:

或者用浅蓝色的阴蒂

代码语言:javascript
复制
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 internal,然后在相同的环境中部署pgadmin。那么pgadmin应该能够在$POSTGRES_INSTANCE_NAME:5432上到达postgres

部署pgadmin

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74519483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档