mariadb
映像的docker容器,并创建了三个卷,如下所示。version: '2.0'
services:
mariadb:
image: mariadb:latest
restart: always
container_name: mariadb
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=testdb
ports:
- 3307:3306
volumes:
- ./database:/var/lib/mysql
- ./_conf/mariadb.cnf:/etc/mysql/my.cnf:ro
- ./logs:/var/log/mysql
前两个卷成功运行,但是我找不到mariadb-将文件记录到
logs
文件夹中。我似乎logs
文件夹在主机以及容器(/ var / log / mysql)上显示为空白。我认为主机文件夹将覆盖到docker文件系统中。如果我从docker-compose中删除此卷(
./logs:/var/log/mysql
),则日志文件将显示在容器上。我的计划是将
/var/log/mysql/
文件夹安装到本地计算机上。 br />谢谢!#1 楼
如果您使用CentOS 7(如我所用)。您可能默认情况下已打开SELinux。检查https://www.rootusers.com/how-to-enable-or-disable-selinux-in-centos-rhel-7/或这样安装:
volumes:
- ./database:/var/lib/mysql:Z
- ./_conf/mariadb.cnf:/etc/mysql/my.cnf:Z
- ./logs:/var/log/mysql:Z
#2 楼
如果您正在运行基于RedHat的发行版,例如在Fedora或CentOS上,默认情况下您可能已打开SELinux。通过安装:Z
选项,可以自动允许容器访问主机上的文件,如下所示: volumes:
- ./database:/var/lib/mysql:Z
- ./_conf/mariadb.cnf:/etc/mysql/my.cnf:Z
- ./logs:/var/log/mysql:Z
#3 楼
如果将/var/log/mysql:/var/log/mysql
定义为卷,那么位于容器/var/log/mysql/
中的内容将存储在主机上的/var/log/mysql/
文件夹中。可能无法将
/var/lib/mysql
挂载为SElinux或应用程序防护阻止了此操作。https://hub.docker.com/_/mysql/
请注意,启用了SELinux的主机系统上的用户可能会看到与此相关的问题
。当前的解决方法是将相关的SELinux策略类型分配给新的数据目录,以便可以
访问该容器:
$ chcon -Rt svirt_sandbox_file_t /my/own/datadir
评论
是的,我同意,。/ database卷工作正常,即使我在主机上的./logs文件夹上创建文件,它也将显示在容器上,但卷不能按反转顺序工作。
–空指针
17年9月8日在6:53
例如,如果运行了来自dockerhub的mysql容器并将数据库存储在/ var / lib / mysql中,则该容器将重新启动,然后也会在该容器中找到主机上的数据库
– 030
17年9月8日在7:07
评论
在主机上尝试chmod 777 / var / log / mysql,我敢打赌,以mysql用户身份运行的守护进程无权在主机上的该目录中写入。之后,您将必须在容器内找到mysql用户ID进行修改,以免让每个人都读入自己的数据库日志。selinux或apparmor可能已激活
我正在使用Debian os,并且apparmor已经停用。