在 Visual Studio 中运行 Docker Compose 会抛出 Postgres 未初始化错误

问题描述 投票:0回答:1

我将 Docker 编排添加到 .NET 8 Web API,并在 docker-compose.yml 中,我为 Postgres 映像和 API 项目添加了服务,如下所示:

services:
  bookify.api:
    image: ${DOCKER_REGISTRY-}bookifyapi
    build:
      context: .
      dockerfile: Bookify.Api/Dockerfile
    depends_on:
      - bookify-db
  
  bookify-db:
    image: 'postgres:latest'
    container_name: Bookify.Db
    environment:
      - POSTGRES_DB= bookify
      - POSTGRES_USER = postgres 
      - POSTGRES_PASSWORD = postgres 
    volumes:
      - ./.containers/database:/var/lib/postgresql/data
    ports:
      - 5432:5432

当我在 Visual Studio 中运行 Docker Compose(或尝试在 Docker Desktop 中运行映像)时,API 映像会运行,但数据库映像会引发以下错误:

Database is uninitialized and superuser password is not specified.
You must specify POSTGRES_PASSWORD to a non-empty value for the
superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".

我在 SO 和 microsoft 上找到了很多答案,提到只需添加 POSTGRES_PASSWORD 的环境变量,但我已经在 docker-compose.yml 文件中了。

这是运行 Docker Compose 生成的 docker run 命令:

docker run --hostname=ee75d8072999 --env=POSTGRES_USER = postgres --env=POSTGRES_PASSWORD = postgres --env=POSTGRES_DB= bookify --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/postgresql/16/bin --env=GOSU_VERSION=1.17 --env=LANG=en_US.utf8 --env=PG_MAJOR=16 --env=PG_VERSION=16.4-1.pgdg120+1 --env=PGDATA=/var/lib/postgresql/data --' --runtime=runc -d postgres:latest

我不确定我错过了什么。我是否需要创建一个具有该名称的数据库(例如在 pgAdmin 中),或者是否有一些我缺少的东西也需要下载?

postgresql docker docker-compose
1个回答
0
投票

您应该定义没有空格的环境变量:

environment:
  - POSTGRES_DB=bookify
  - POSTGRES_USER=postgres 
  - POSTGRES_PASSWORD=postgres 
© www.soinside.com 2019 - 2024. All rights reserved.