Docker Compose - 如何存储数据库数据?

标签 docker docker-compose data-containers

我是 docker 新手,正在使用 docker compose 开发项目。从文档中我了解到我应该使用仅数据容器来保持数据的持久性,但我无法使用 docker-compose 这样做。 每当我执行 docker-compose down 时,它都会从 db 中删除数据,但通过执行 docker-compose stop 不会删除数据。可能是因为我没有创建命名数据卷,并且 docker-compose down 几乎不会删除所有容器。所以我尝试命名容器,但它给我带来了错误。 请查看我的 yml 文件:

version: '2'
services: 
   data_container:
     build: ./data
     #volumes:
     #  - dataVolume:/data
  db:
    build: ./db
    ports:
      - "5445:5432"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_DB=postgres
    #   - PGDATA=/var/lib/postgresql/data/pgdata
    volumes_from:
     # - container:db_bus
       - data_container
  geoserver:
    build: ./geoserver
    depends_on:
      - db
    ports:
      - "8004:8080"
    volumes:
      - ./geoserver/data:/opt/geoserverdata_dir

  web:
    build: ./web
    volumes:
      - ./web:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    command: python manage.py runserver 0.0.0.0:8000

  nginx:
    build: ./nginx
    ports:
      - "83:80"
    depends_on:
      - web

data_container 的 Docker 文件是:

FROM stackbrew/busybox:latest
MAINTAINER Tom Offermann <tom@offermann.us>

# Create data directory
RUN mkdir /data

# Create /data volume
VOLUME /data

我试过了,但是通过 docker-compose down,数据丢失了。我尝试将 data_container 命名为您可以看到注释行,它给我带来了这个错误:

ERROR: Named volume "dataVolume:/data:rw" is used in service "data_container" but no declaration was found in the volumes section.

所以现在我正在做的是我创建了一个独立的数据只命名容器并将其放入数据库的 volumes_from 值中。它运行良好,即使在执行 docker-compose down 之后也没有删除任何数据。

我的查询:

  • 使用 docker-compose 制作可以存储数据库数据的容器并正确使用它们的最佳方法是什么?

  • 我的意识不同意我选择的方法,即创建一个独立的数据容器。有什么想法吗?

最佳答案

docker-compose down

执行以下操作

Stops containers and removes containers, networks, volumes, and images created by up

所以您遇到的行为是预期的。

使用 docker-compose stop 关闭使用 docker-compose 文件创建的容器,但不删除它们的卷。

其次,您不需要 docker compose 版本 2 中的 data-container 模式。所以删除它并使用

  db:
    ...
    volumes:
       - /var/lib/postgresql/data

关于Docker Compose - 如何存储数据库数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38793821/

相关文章:

azure - 构建 docker 镜像时无法在 Azure DevOps (Artifacts) 中授权

networking - 从 docker 容器访问主机的虚拟机

mysql - 在 AWS Elastic Beanstalk 上使用 Docker 编写 NodeJs 和 MySQL

docker - 如何更新另一个容器的体积时通知Docker容器?

docker - 如何运行Bitbucket管道在Nanobox上部署基于PHP的应用程序

docker - 如何使用 Docker Swarm 模式或 Docker Compose 部署 IPv6 容器

docker - docker-compose建立和建立

c++ - 面向数据的设计;如何优化 C++ 中的数据结构以提高性能?

docker - kube-apiserver docker持续重启