修复Docker中的World-writable MySql错误
我正在使用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: [Warning] World-writable config file ‘/etc/mysql/conf.d/my.cnf’ is ignored.
我使用Windows作为我的主机系统.问题是Docker以完全权限挂载diretory并且无法更改它们.
问题 – 如何解决?正如你在我的Dockerfile中看到的那样,我尝试了一些解决方案,但它们都不适用于我(但也许我做错了).
目前我认为最合理的解决方案是将MySql conf文件不是直接挂载到/etc/mysql/conf.d/,而是挂载到其他目录并在MySql启动之前将这些文件复制到/etc/mysql/conf.d/目录并设置它们不是777权限.我已经尝试过了,但在Dockerfile中,这些文件还没有出现,因此无法复制.
有没有简单的解决方案来解决它?或者也许某些MySql设置可以更改为不关心conf文件权限?
我也不能简单地在Dockerfile中使用COPY来复制Mysql配置文件(而不是使用卷),因为我想在多个站点中使用这些图像,并且每个图像可能具有不同的配置.