【问题标题】:Persisting database using docker volumes使用 docker 卷持久化数据库
【发布时间】:2017-01-12 01:05:41
【问题描述】:

我正在尝试将 postgres 数据保存在 docker 容器中,以便在您 docker-compose down and docker-compose up -d 时不会丢失之前会话的数据。我无法让它做很多事情 - 将容器拉下并再次备份通常会删除数据。

这是我当前的 docker-compose.yml:

version: '2'
services:
  api:
    build: .
    ports:
      - '8245:8245'
    volumes:
      - .:/home/app/api
      - /home/app/api/node_modules
      - /home/app/api/public/src/bower_components
    links:
      - db
  db:
    build: ./database
    env_file: .env
    ports:
      - '8246:5432'
    volumes_from:
      - dbdata

  dbdata:
    image: "postgres:9.5.2"
    volumes:
      - /var/lib/postgresql/data

帮助?

【问题讨论】:

    标签: postgresql docker docker-compose


    【解决方案1】:

    根据Dockment of Docker Compose,当你写类似:

    volumes:
      - /var/lib/postgresql/data
    

    它创建一个新的 docker 卷并将其映射到容器内的/var/lib/postgresql/data。 因此,每次运行 docker-compose updocker-compose down 时,它都会创建新卷。您可以通过docker volume ls 确认该行为。

    为避免这种情况,您有两种选择:

    (A) 将主机目录映射到容器中

    您可以使用<HOST_PATH>:<CONTAINER_PATH>将主机目录映射到容器中。

    volumes:
      - /path/to/your/host/directory:/var/lib/postgresql/data
    

    postgresql的数据会保存到容器宿主的/path/to/your/host/directory中。

    (B) 使用外部容器

    docker-compose 有一个选项 external container。 当它设置为 true 时,它​​不会总是创建音量。 这是一个例子。

    version: '2'
    services:
      dbdata:
        image: postgres:9.5.2
        volumes:
          - mypostgresdb:/var/lib/postgresql/data
    volumes:
      mypostgresdb:
        external: true
    

    使用external: true,docker-compose 不会创建mypostgredb 卷,因此您必须使用以下命令自己创建它:

    docker volume create --name=mypostgredb
    

    postgresql 的数据将被保存到名为mypostgredb 的 docker 卷中。阅读reference了解更多详情。

    【讨论】:

    • 0 我试过这个,但它对我不起作用。我仍然遇到与OP相同的问题。如果我做 docker volume ls 我可以在那里看到以前的数据量,但当前它有空数据
    猜你喜欢
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2022-01-18
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多