我正在使用 docker-compose,对于 db 我定义了这样的容器:
db:
build: ../builds/mysql-5.7
environment:
- MYSQL_ROOT_PASSWORD=pass
- MYSQL_DATABASE=
- MYSQL_USER=
- MYSQL_PASSWORD=
expose:
- 3306
volumes:
- /c/Users/marcin/dock-test/composers/l1.app/mysql/data/:/var/lib/mysql/
- /c/Users/marcin/dock-test/composers/l1.app/mysql/conf.d/:/etc/mysql/conf.d/
- /c/Users/marcin/dock-test/composers/l1.app/mysql/log/:/var/log/mysql/
我的该图像的 Dockerfile 是:
# Base image
FROM mysql:5.7
# Set valid file permissions - otherwise MySql won't read those files
#COPY mysql-perm-fix.sh /etc/init.d/mysql-perm-fix.sh
#RUN chmod +x /etc/init.d/mysql-perm-fix.sh
#RUN update-rc.d mysql-perm-fix.sh defaults 100
#RUN mkdir /etc/mysql/conf.d/source
#RUN cp /etc/mysql/conf.d/source/my.cnf /etc/mysql/conf.d/my.cnf
#RUN chmod -R 644 /etc/mysql/conf.d
目前,除了基本 MySql 映像之外,所有内容都已注释。
问题是,当我启动容器时,由于以下警告,MySql 不会使用我的 MySql cnf 文件:
mysqld:[警告]世界可写配置文件“/etc/mysql/conf.d/my.cnf”被忽略。
我使用 Windows 作为我的主机系统。问题是 Docker 挂载目录具有完全权限,并且无法更改。
问题是——如何解决?正如您在我的 Dockerfile 中看到的,我尝试了一些解决方案,但没有一个对我有用(但也许我做错了什么)。
目前我认为最合理的解决方案是将 MySql conf 文件直接安装到/etc/mysql/conf.d/
但到其他目录并将这些文件复制到/etc/mysql/conf.d/
MySql启动前的目录并设置它们不是777权限。我已经尝试过了,但是在 Dockerfile 中这些文件还不存在,因此无法复制它们。
有什么简单的解决方案可以修复它吗?或者也许可以将某些 MySql 设置更改为不关心 conf 文件权限?
我也不能简单地使用 Dockerfile 中的 COPY 来复制 Mysql 配置文件(而不是使用卷),因为我想由多个站点使用这些映像,并且每个站点可能有不同的配置。