Docker-编写持久数据问题
Docker-Compose Persistent Data Trouble
我在使用 Mariadb
配置持久数据时遇到问题。
我正在使用 docker-compose
,每个服务都在一个容器中(Nginx
、PHP-FPM
和 Mariadb
)。
一切正常,除了 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"
}
]
我在使用 Mariadb
配置持久数据时遇到问题。
我正在使用 docker-compose
,每个服务都在一个容器中(Nginx
、PHP-FPM
和 Mariadb
)。
一切正常,除了 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"
}
]