解决Docker部署mysql挂载宿主机配置文件不生效

问题重现

最近在研究Docker私有化部署应用时,博主打算使用docker-compose方式部署mysql,nacos还有具体的应用,mysql目前使用自己定义的Dockerfile来构建镜像,使用docker-compose.yml来部署服务:

FROM mysql:5.7

ADD ./config/ /etc/mysql/

EXPOSE 3366

CMD ["mysqld"]


version: '3.7'
 
services:
  mysql-db:
    container_name: mysql5.7
    #image: mysql:5.7
    image: test-mysql:0.0.1
    build:
      context: ./mysql
      dockerfile: Dockerfile

    ports:
      - 3366:3366
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/log:/var/log/mysql
      - ./mysql/config:/etc/mysql
    command:
      --wait_timeout=31536000
      --interactive_timeout=31536000
      --max_connections=1000

但是在使用docker-compose up -d命令拉起服务时,发现数据目录可以挂载到本地,但是config目录下的配置文件my.cnf不生效:

[mysqld]
port=3366

问题分析

配置文件只配置了mysqld的端口,但是服务启动的时候还是使用了默认的3306端口,然后打算在docker-compose.yml里command加上指定的配置项--default-file=/etc/mysql/my.cnf,结果发现报错了:

Found option without preceding group in config file: /Users/gukey/.my.cnf at line: 1

 因此打算使用最原始的命令行的方式来运行容器:

docker run --name mysql5.7 -p 3366:3366 -v D:/docker/mysql/data:/var/lib/mysql -v D:/docker/mysql/config:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 --user=root  mysql:5.7

结果竟然也报错了:

然后感觉是不是my.cnf的编码有问题?毕竟windows和linux会存在编码上的不同。然后通过编辑器 切换编码发现:

发现这个文件竟然乱码了!!然后突然醒悟!这个文件是我使用编辑器生成的,没有控制好对应的编码格式,调整my.cnf的内容后,重新执行,问题迎刃而解:

 

 

 然后切换回docker-compose的方式启动,果然没问题了!

现在终于可以通过宿主机修改配置文件的方式调整容器内mysql的参数了。

问题总结

1.在使用window端的docker时,需要严格关注所有文件的编码格式,尽量避免因为配置文件的编码问题导致的错误发生。

2.在使用文本编辑器编辑或者新增文件时,需要通过切换不同的编码的方式,检查文件的格式是否有问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值