mysql - 修复 Docker 中的 World-writable MySql 错误

标签 mysql docker file-permissions docker-compose dockerfile

我正在使用 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/

相关文章:

mysql - 来自另一个表的 SQL View

docker - 在Dockerfile中将文件从目标复制到Web应用程序时出现错误

Python 依赖关系以及 Docker 和 Crontab

php - 如何确保php对wp专用服务器有写权限

php - MYSQL 触发器错误,

php - CakePHP. SQLSTATE[42S22] : Column not found: 1054 Unknown column 'CalendarsClassification.id' in 'field list'

php - 使用 session 用户名让每个用户只投票一次

linux - Docker 卷将文件绑定(bind)为远程 linux 服务器上的目录

linux - 设置创建包含网站的文件夹的权限

linux - git 没有在 `.git` 文件夹中的新目录上保留 setgid 位?