Docker容器无法识别MySQL配置文件,如何在docker-compose.yml中配置?
解决MySQL容器自定义配置文件不生效的问题
要让你本地的my5.5.cnf和my5.7.cnf配置在Docker容器中生效,核心是把本地配置文件挂载到MySQL容器会读取的正确路径。MySQL容器会自动加载/etc/mysql/conf.d/目录下的.cnf文件(这种方式不会完全覆盖默认配置,只会叠加自定义参数,更稳妥),下面是修改后的完整docker-compose.yml:
version: '2.2' services: mysql57: image: mysql/mysql-server:5.7 environment: MYSQL_ROOT_PASSWORD: root volumes: - /home/Docker/mysql5.7/mysql:/var/lib/mysql # 挂载自定义5.7配置文件到容器的conf.d目录 - /home/Docker/config/my5.7.cnf:/etc/mysql/conf.d/my5.7.cnf ports: - "127.0.0.11:3306:3306/tcp" labels: io.rancher.scheduler.affinity:host_label: server-fvs21=true io.rancher.container.pull_image: always mysql55: image: mysql/mysql-server:5.5 environment: MYSQL_ROOT_PASSWORD: root volumes: - /home/Docker/mysql5.5/mysql:/var/lib/mysql # 挂载自定义5.5配置文件到容器的conf.d目录 - /home/Docker/config/my5.5.cnf:/etc/mysql/conf.d/my5.5.cnf ports: - "127.0.0.1:3306:3306/tcp" labels: io.rancher.scheduler.affinity:host_label: server-fvs21=true io.rancher.container.pull_image: always # 修正了你原来的拼写错误alwa1ys networks: default:
关键注意事项:
- 配置文件路径:如果你的自定义配置需要完全替换默认主配置,可以把挂载路径改为
/etc/mysql/my.cnf,但更推荐用conf.d目录,避免覆盖默认的必要配置项。 - 文件权限:确保本地的
my5.5.cnf和my5.7.cnf文件权限足够,容器内的MySQL用户(通常UID为999)能读取它。可以执行以下命令调整权限:chmod 644 /home/Docker/config/my5.5.cnf /home/Docker/config/my5.7.cnf chown 999:999 /home/Docker/config/my5.5.cnf /home/Docker/config/my5.7.cnf - 验证配置生效:容器启动后,进入容器执行以下命令确认配置是否加载:
也可以查看MySQL的启动日志,确认是否加载了你的自定义配置文件:# 进入5.7容器验证指定参数 docker exec -it <mysql57容器名> mysql -uroot -proot -e "SHOW VARIABLES LIKE '<你配置的参数名>';" # 进入5.5容器验证指定参数 docker exec -it <mysql55容器名> mysql -uroot -proot -e "SHOW VARIABLES LIKE '<你配置的参数名>';"docker logs <容器名> | grep "my5.7.cnf" # 对应5.7容器 docker logs <容器名> | grep "my5.5.cnf" # 对应5.5容器
内容的提问来源于stack exchange,提问作者Павел Кушнеревич
相关产品推荐
相关产品推荐

