docker 重启时数据库丢失

Posted

技术标签:

【中文标题】docker 重启时数据库丢失【英文标题】:database lost on docker restart 【发布时间】:2018-06-28 04:12:43 【问题描述】:

我正在使用 Windows 10 在 Docker 上运行 influxdb 和 grafana。

每次我关闭 Docker,我都会丢失我的数据库。

这是我所知道的:

我已尝试调整保留策略,但对 结果 我可以关闭并重新启动容器(docker-compose down)并且数据库仍然存在。只有当我关闭 Docker for Windows 时,我才会丢失数据库。 当我创建新数据库 (/data/influxdb/data/) 时,我在映射目录上看不到任何新文件夹。只有“_internal”文件夹存在,我假设它对应于名为“_internal”的持久化数据库

这是我的 yml 文件。非常感谢任何帮助。

version: '3'

services:
  # Define an InfluxDB service
  influxdb:
    image: influxdb
    volumes:
      - ./data/influxdb:/var/lib/influxdb
    ports:
      - "8086:8086"
      - "80:80"
      - "8083:8083"
  grafana:
    image: grafana/grafana
    volumes:
      - ./data/grafana:/var/lib/grafana
    container_name: grafana
    ports:
      - "3000:3000"
    env_file:
      - 'env.grafana'
    links:
      - influxdb
  # Define a service for using the influx CLI tool.
  # docker-compose run influxdb-cli
  influxdb-cli:
    image: influxdb
    entrypoint:
      - influx
      - -host
      - influxdb
    links:
      - influxdb

【问题讨论】:

当您使用绝对路径来定义保存数据的位置时,会有什么行为?喜欢:/var/lib/data/influxdb:/var/lib/influxdb 【参考方案1】:
docker-compose down

除非指定,否则上述命令不应删除卷。

https://docs.docker.com/compose/reference/down/

我尝试了以下 docker-compose.yaml 文件,即使使用 down 或 rm docker 命令也可以保留数据。

version: '3'
services:
  influxdb:
    image: influxdb:2.0
    ports:
      - 8086:8086
    volumes:
      - influxdb-data:/var/lib/influxdb2
    restart: always
volumes:
  influxdb-data:
    external: true

【讨论】:

【参考方案2】:

这似乎对我有用,但以防万一其他人正在阅读与我相同的问题,与我的 Docker Wordpresscompose 站点的连接丢失了。 似乎需要重新启动。

我使用了来自@tgogos 的建议,并在 docker 根文件夹的 shell 终端中输入了命令:

docker-compose restart

但在此之前,我编辑了 yml 文件 docker-compose.yml 以包括:

restart: always

来自linode.com site的建议

【讨论】:

【参考方案3】:

如果您使用的是docker-compose down/up,请记住这不是“重新启动”,因为:

docker-compose up 创建新的容器和 docker-compose down 删除它们

码头工人组成

为服务构建、(重新)创建、启动和附加到容器。

docker-compose down

停止容器并移除由 up 创建的容器、网络、卷和映像。

另一方面,如果你继续使用:

docker-compose start docker-compose stop docker-compose restart

您处理相同的容器,即运行 docker-compose up 时创建的容器。

【讨论】:

这完全是问题所在!谢谢!【参考方案4】:

我认为问题与挂载的卷有关,而不是 docker 或 influxdb。您应该首先找到 influxdb 存储数据的位置(默认情况下它在您的主文件夹“~user/.influxdb”中),然后生成 influxdb.conf 文件,最后挂载卷。

【讨论】:

以上是关于docker 重启时数据库丢失的主要内容,如果未能解决你的问题,请参考以下文章

docker 容器重启策略

docker 启动 mysql,重启docker导致容器消失

docker创建gitlab容器反复重启

Rabbitmq Docker容器重启后,MQ内的残留消息会丢失(K8s环境)

Arcgis打包到docker,重启容器后发布的服务丢失解决方案。

docker简单介绍----存储