Docker Postgres在不使用卷的情况下持久化数据(不应持久化)

niwlg2el  于 2022-10-23  发布在  Docker
关注(0)|答案(2)|浏览(126)

出于测试目的,我使用停靠容器来运行postgres,它不应该在不同的运行之间持久化数据。
这是dockerfile:

FROM postgres:alpine
ENV POSTGRES_PASSWORD=1234
EXPOSE 5432

这是我的作文文件:

version: "3.9"
services:
  web:
    build:
      context: ../../.
      dockerfile: ./services/web/Dockerfile
    ports:
      - "3000:3000"

  db:
    build: ../db
    ports:
      - "5438:5432"

  graphql:
    build:
      context: ../../.
      dockerfile: ./services/graphql/Dockerfile
    ports: 
      - "4000:4000"

  indexer:
    build:
        context: ../../.
        dockerfile: ./services/indexer-ts/Dockerfile
    volumes:
      - ~/.aws/:/root/.aws:ro

然而,我发现在会话之间所有数据都是持久化的,我不知道为什么。这完全扰乱了我的测试,预计不会发生。
即使在运行docker system prune之后,所有数据仍保持不变,这意味着容器可能正在以某种方式使用卷
有谁知道为什么会发生这种情况,以及如何不将数据持久化?

t30tvxxf

t30tvxxf1#

当您通过键入CTRL-C或类似命令停止docker-compose环境时,如果配置没有更改,则下次运行docker-compose up时,它将重新启动相同的容器。因此,即使没有卷,以前存在的任何数据也将继续存在。
为了确保您从新容器开始,请始终运行:

docker-compose down

如果您在配置中定义了显式卷,则添加-v也会删除这些卷:

docker-compose down -v

(在这种情况下,这不是必要的。)
与您的问题无关,但您为什么要构建一个定制的postgres映像?您只需在docker-compose.yaml文件中进行设置:

db:
    image: postgres:alpine
    environment:
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
    ports:
      - "5438:5432"

(然后在.env文件中设置POSTGRES_PASSWORD。)

xoefb8l8

xoefb8l82#

您说得对,它使用的是卷。
您可以使用-v开关来清理:

docker-compose rm -v db

相关问题