当前位置:  开发笔记 > 编程语言 > 正文

Docker-撰写持久性数据问题

如何解决《Docker-撰写持久性数据问题》经验,为你挑选了1个好方法。

我在配置持久数据方面遇到了麻烦Mariadb.我正在使用docker-compose,将每个服务放在一个容器中(Nginx,PHP-FPMMariadb).除了Mariadb不存储数据外,一切正常.每次重新启动容器时,都会丢失所有数据.然后我发现我可以使用另一个容器来保存数据,甚至不必运行.

所以我在Mariadb容器volume_from内容容器中使用.但是当我这样做时,当我尝试映射卷时/var/lib/mysql,Container MariaDb无法启动.

错误

2015-12-29 12:16:40 7f2f02e4a780
InnoDB:文件操作中的操作系统错误号13.
InnoDB:错误意味着mysqld没有对
InnoDB 的访问权限:目录.

该错误是指有关卷权限的问题,但我尝试Dockerfile在两个容器中设置权限,问题仍然存在.我有点迷茫.我正在使用OSX,所以我认为这是一个OSX问题.谁可以帮我这个事?

这是我的代码:

我的Docker撰写

content:
  build: containers/content
  container_name: content
  hostname: content
  volumes:
    - /var/lib/mysql
mariadb:
  build: containers/mariadb
  container_name: mariadb
  hostname: mariadb
  ports:
    - "3306:3306"
  volumes_from:
    - content
  environment:
    - MYSQL_ROOT_PASSWORD=mariadb
    - TERM=xterm
    - PORT=3306

MariaDB Dockerfile

FROM debian:jessie

RUN apt-get update && apt-get install -y  mariadb-server

EXPOSE 3306

内容Dockerfile

FROM debian:jessie

VOLUME /var/lib/mysql

CMD ["true"]

Polinux.. 8

我这样做的方式是我使用busybox存储和与mariadb共享的所有数据.然后--volumes-from在mariadb中使用链接目录.请查看我简化的compose.yml文件.

db-data:
  container_name: db-data
  image: busybox:latest
  volumes:
    - /data/mysql:/var/lib/mysql

db:
  container_name: db
  image: million12/mariadb
  restart: always
  volumes_from:
    - db-data
  environment:
    - MARIADB_USER=admin
    - MARIADB_PASS=my_pass

现在所有数据库文件也可以在主机操作系统上访问,并且不应存在任何权限问题.

docker-compose 2.0的更新

version: '2'
volumes:
  database:

services:
  db:
    container_name: db
    image: million12/mariadb
    restart: always
    volumes_from:
       - database
     environment:
       - MARIADB_USER=admin
       - MARIADB_PASS=my_pass

您可以通过运行命令查看docker将该卷存储在硬盘驱动器上的位置:
docker volume inspect docker_database

[
{
    "Name": "docker_database",
    "Driver": "local",
    "Mountpoint": "/var/lib/docker/volumes/docker_database/_data",
    "Labels": null,
    "Scope": "local"
}

]



1> Polinux..:

我这样做的方式是我使用busybox存储和与mariadb共享的所有数据.然后--volumes-from在mariadb中使用链接目录.请查看我简化的compose.yml文件.

db-data:
  container_name: db-data
  image: busybox:latest
  volumes:
    - /data/mysql:/var/lib/mysql

db:
  container_name: db
  image: million12/mariadb
  restart: always
  volumes_from:
    - db-data
  environment:
    - MARIADB_USER=admin
    - MARIADB_PASS=my_pass

现在所有数据库文件也可以在主机操作系统上访问,并且不应存在任何权限问题.

docker-compose 2.0的更新

version: '2'
volumes:
  database:

services:
  db:
    container_name: db
    image: million12/mariadb
    restart: always
    volumes_from:
       - database
     environment:
       - MARIADB_USER=admin
       - MARIADB_PASS=my_pass

您可以通过运行命令查看docker将该卷存储在硬盘驱动器上的位置:
docker volume inspect docker_database

[
{
    "Name": "docker_database",
    "Driver": "local",
    "Mountpoint": "/var/lib/docker/volumes/docker_database/_data",
    "Labels": null,
    "Scope": "local"
}

]


本文建议您对db和data-volume容器使用相同的映像:http://container42.com/2014/11/18/data-only-container-madness/
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有