我将 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 中),或者是否有一些我缺少的东西也需要下载?
您应该定义没有空格的环境变量:
environment:
- POSTGRES_DB=bookify
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres