【发布时间】:2016-08-28 07:54:55
【问题描述】:
我正在使用 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 的 cnf 文件不会被 MySql 使用,因为这个警告:
mysqld:[警告] 全局可写配置文件 '/etc/mysql/conf.d/my.cnf' 被忽略。
我使用 Windows 作为我的主机系统。问题是 Docker 挂载了具有完全权限的目录,并且无法更改。
问题 - 如何解决?正如您在我的 Dockerfile 中看到的那样,我尝试了一些解决方案,但它们都不适合我(但也许我做错了什么)。
目前我认为最合理的解决方案是将MySql conf文件不直接挂载到/etc/mysql/conf.d/,而是挂载到其他目录,然后在MySql启动之前将这些文件复制到/etc/mysql/conf.d/目录,并将它们设置为不777权限。我试过了,但是在 Dockerfile 中这些文件还不存在,所以它们不能被复制。
有没有简单的解决方案来解决它?或者也许某些 MySql 设置可以更改为不关心 conf 文件权限?
我也不能简单地在 Dockerfile 中使用 COPY 来复制 Mysql 配置文件(而不是使用卷),因为我想通过多个站点使用这些映像,并且每个站点可能具有不同的配置。
【问题讨论】:
标签: mysql docker file-permissions docker-compose dockerfile