postgresql - 使用 docker swarm 模式时如何将数据保存在卷上?

标签 postgresql docker yaml docker-swarm

Docker 新手,我正在尝试将 Postgres 和 pgadmin4 设置为在虚拟机内的 docker for Mac 上作为单个服务运行。一切正常,但一旦我停止服务,我的数据就消失了。我正在使用命名卷来保存数据,但可能做错了什么。它是什么?

这是我的设置:

# create my VM
docker-machine create dbvm
# set the right environment
eval $(docker-machine env dbvm)

这是我的 docker-compose.yaml 文件:

version: '3'

services:
  db:
    image: postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=my_db
    volumes:
      - pgdata:/pgdata
    ports:
      - 5432:5432
  pgadmin:
    image: fenglc/pgadmin4
    ports:
      - 5050:5050
    volumes:
      - pgadmindata:/pgadmindata
volumes:
  pgdata:
  pgadmindata:

使用docker-compose.yaml,我运行:

docker stack deploy -c docker-compose.yaml dbstack

我可以执行此设置中的所有操作,但如果我运行 docker stack rm dbstack ,数据将在此之后消失,但卷仍然存在。

$ docker volume ls
DRIVER              VOLUME NAME
local               0c15b0b22c6b850e8768c14045da166253424dda4df8d2e13df75fd54d833412
local               22bab81d9d1de0e07de97363596b096f944752eba617ff574a0ab525239227f5
local               6da6e29fb98ad0f66d7da6a75dc76066ce014b26ea43567c55ed318fda707105
local               dbstack_pgadmindata
local               dbstack_pgdata

我错过了什么?

最佳答案

除非您在某些未显示的配置中拥有它,否则我相信您需要映射到容器内的默认数据位置,例如 pgdata:/var/lib/postgresql/data

关于postgresql - 使用 docker swarm 模式时如何将数据保存在卷上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48848776/

相关文章:

docker - 如何让 gsutil 在 docker 容器中使用 gcloud 凭据

azure - Azure DevOps Pipeline 上的 YAML 解析器错误

symfony1 - 在symfony中,如何在yaml文件中将默认值定义为空数组?

docker - 在docker容器上为rabbitmq设置用户和密码

arrays - 在 swagger 中创建可重用的数组定义

python - 从 OpenErp 中删除模块安装队列

database - 创建数据库postgresql出错

postgresql - 带参数的列 postgres 函数的默认值

Java 使用 JDBC 连接到 Postgres - SQLException

docker - 在Ubuntu中启动minikube会删除本地docker镜像