docker 中的 MacOS Postgres 在 运行 docker-compose down 后未被删除

MacOS Postgres in docker is not getting deleted after running docker-compose down

我正在 Docker-compose 中启动一个 Postgres 数据库,它第一次运行良好。我想测试一些东西所以我 运行

docker-compose down

经过我的修改。我运行docker-compose up。这一次,我不断收到一条消息说

PostgreSQL Database directory appears to contain a database; Skipping initialization

我的docker-compose如下:

  postgres_db:
    image: postgres:14.1
    restart: unless-stopped
    environment:
      - POSTGRES_PASSWORD=${BP_ADMIN_PASSWORD}
    volumes:
      - ./admin/${BP_ENV:-dev}/database:/docker-entrypoint-initdb.d
      - ./data/postgres:/var/lib/postgresql/data
    command: postgres -c logging_collector=on -c log_rotation_age=1d -c log_directory=/mnt/log -c 
    ports:
      - "5432:5432"

我运行docker-compose down --volumes试图摆脱一切,但没有奏效。 然后,我删除了本地驱动器上的整个 ./data/postgres 文件夹,但仍然失败。之后,我注释掉了- ./data/postgres:/var/lib/postgresql/data,还是不行。

如何删除现有数据库?

运行 docker-compose down --volumes 只会删除 Docker 个卷。您没有使用卷;您正在使用绑定挂载,其中您正在容器内挂载主机目录:

    volumes:
      - ./admin/${BP_ENV:-dev}/database:/docker-entrypoint-initdb.d
      - ./data/postgres:/var/lib/postgresql/data

删除该数据的方法是使用 rm,如:

rm -rf ./data/postgres/*

如果您想为数据库目录使用 Docker 卷,则如下所示:

version: "3"

services:
  postgres_db:
    image: postgres:14.1
    restart: unless-stopped
    environment:
      - POSTGRES_PASSWORD=${BP_ADMIN_PASSWORD}
    volumes:
      - ./admin/${BP_ENV:-dev}/database:/docker-entrypoint-initdb.d
      - pgdata:/var/lib/postgresql/data
    command: postgres -c logging_collector=on -c log_rotation_age=1d -c log_directory=/mnt/log -c 
    ports:
      - "5432:5432"

volumes:
  pgdata:

在这种情况下,运行 docker-compose down -v(或 --volumes,如果您 prefer) 会删除数据库卷。