我正在使用 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 以完全权限装载目录并且无法更改它们。
问题 - 如何解决?正如您在我的 Dockerfile 中看到的那样,我尝试了一些解决方案,但没有一个对我有用(但也许我做错了什么)。
目前我认为最合理的解决方案是不直接将 MySql conf 文件挂载到 /etc/mysql/conf.d/
而是挂载到其他目录并将这些文件复制到 /etc/mysql/conf.d/
MySql 启动前的目录并设置它们不是 777 权限。我试过了,但在 Dockerfile 中,这些文件还不存在,所以无法复制它们。
是否有任何简单的解决方案来修复它?或者可以更改某些 MySql 设置以不关心 conf 文件权限?
我也不能简单地使用 Dockerfile 中的 COPY 来复制 Mysql 配置文件(而不是使用卷),因为我想通过多个站点使用这些图像,并且每个站点都可能有不同的配置。
最佳答案
我刚遇到这个问题,对我来说解决方法是将 my.cnf
文件在 Windows 中设置为只读。
关于mysql - 修复 Docker 中的 World-writable MySql 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37001272/