docker 在Azure容器应用程序中部署Postgres数据库

hgtggwj0  于 2022-11-22  发布在  Docker
关注(0)|答案(1)|浏览(130)

你好,我是Azure的新手,我需要将Postgres数据库部署到Azure容器应用程序。我知道在容器化环境中托管数据库不是一个好做法。
我按照Microsoft文档中的link来部署应用程序,以下是我的配置,

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

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

我希望确保Postgres数据库在Azure容器应用程序中成功运行,并且需要从Pgadmin连接。

rqqzpn5f

rqqzpn5f1#

这里有两个问题:

  • 您的应用程序定义不正确(尤其是“命令覆盖”)
  • 你可以修复该部分,Postgres将启动,但你将遇到持久存储问题。Azure ContainerApps目前仅支持AzureFiles SMB shares持久存储。然而,Postgres需要硬链接和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 internal,然后在相同的环境中部署pgadmin。
部署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

相关问题