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 启动 mysql,重启docker导致容器消失
Rabbitmq Docker容器重启后,MQ内的残留消息会丢失(K8s环境)