简体   繁体   English

使用docker swarm模式时如何在卷上保留数据?

[英]How to persist data on a volume when using docker swarm mode?

New to Docker and I'm trying to set Postgres and pgadmin4 to run as a single service on docker for Mac inside a virtual machine. Docker的新手,我试图将Postgres和pgadmin4设置为在虚拟机内Mac的docker上作为单一服务运行。 Everything works but as soon as I stop the service my data is gone. 一切正常,但是一旦我停止服务,我的数据就消失了。 I'm using a named volume to persist data but probably doing something wrong. 我正在使用命名卷来保留数据,但可能做错了。 What is it? 它是什么?

Here's my setup: 这是我的设置:

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

Here's my docker-compose.yaml file: 这是我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:

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

docker stack deploy -c docker-compose.yaml dbstack

I can do everything on this setup, but if I run docker stack rm dbstack the data is gone after this, but the volumes still exist. 我可以在此设置上执行所有操作,但是如果我运行docker stack rm dbstack ,数据将在此之后消失,但是卷仍然存在。

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

What am I missing? 我想念什么?

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

@Idg is partially correct. @Idg部分正确。 postgres data lives at /var/lib/postgresql/data per the Docker Hub readme . 根据Docker Hub自述文件, postgres数据位于/var/lib/postgresql/data

But for it to work in your named volume, you can't use a path on the left side, so correct value would be: 但是,要使其在您命名的卷中起作用,您不能使用左侧的路径,因此正确的值应为:

volumes:
  - pgdata:/var/lib/postgresql/data

Then the postgres data will stay in that named volume, on the node it was created on. 然后,postgres数据将保留在其创建所在节点上的该命名卷中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM