我在使用docker-compose
配置持久数据时遇到问题。
我使用Nginx
,将每项服务放在一个容器中(PHP-FPM
,Mariadb
和Mariadb
)。
除Mariadb
不存储数据外,一切正常。每次重新启动容器时,都会丢失所有数据。然后我发现我可以使用另一个容器来保存数据,而且它甚至不必运行。
所以我在volume_from
容器/var/lib/mysql
内容容器中使用了。但是当我这样做时,当我尝试映射卷MariaDb
时,容器Dockerfile
无法启动。
错误
2015-12-29 12:16:40 7f2f02e4a780
InnoDB:文件操作中的操作系统错误号13 InnoDB:错误意味着mysqld没有访问权限 InnoDB:目录。
错误是指有关卷权限的问题,但我尝试在两个容器中通过data$zScore<-(data$value-mean(data$value[data$group==1]))/sd(data$value[data$group==1])
设置权限,问题仍然存在。我有点迷路了。我使用的是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"]
答案 0 :(得分:8)
我这样做是因为我使用busybox存储并与mariadb共享的所有数据。然后在mariadb中使用--volumes-from
来链接这些目录。请查看我简化的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"
}