Docker-编写持久数据问题

Docker-Compose Persistent Data Trouble

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

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

错误

2015-12-29 12:16:40 7f2f02e4a780
InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.

报错是关于volume权限的问题,我尝试在两个容器中通过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 Docker文件

FROM debian:jessie

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

EXPOSE 3306

内容Docker文件

FROM debian:jessie

VOLUME /var/lib/mysql

CMD ["true"]

我的做法是使用 busybox 存储所有数据并与 mariadb 共享。然后在 mariadb 中使用 --volumes-from 到 link 那个目录。请查看我的简化 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

现在所有数据库文件都可以在 host os 上访问,应该不会有任何权限问题。

更新 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"
}

]