docker-compose.yml配置mysql

1、docker-compose.yml配置

version: "3.7"
services:
    mysql:  #mysql容器
      image: mysql 
      container_name: mysql
      restart: always
      command: --default-authentication-plugin=mysql_native_password
      environment:
        MYSQL_ROOT_PASSWORD: "123456" #这里自行设置root用户的密码
      volumes:
       - ./etc/my.cnf/:/etc/my.cnf/
       - ./datadir:/var/lib/mysql
       - ./etc/initdb.d:/docker-entrypoint-initdb.d
       - ./etc/mysql/my.cnf:/etc/mysql/my.cnf  # 这里挂载容器中mysql的配置文件
      ports:
       - 3306:3306  #宿主机和容器间的端口映射,可自行配置
    
    phpmyadmin:  #这里本人还配置了phpmyadmin容器,相当于连接mysql的客户端工具
      image: phpmyadmin/phpmyadmin
      container_name: phpmyadmin
      restart: always        
      ports:
       - 3300:80  #宿主机和容器间的端口映射,可自行配置
      environment:
        PMA_ARBITRARY: 1
        TZ: Asia/Shanghai
        UPLOAD_LIMIT: 100M 

2、 启动docker容器
执行:docker-compose up -d 命令,查看容器启动情况
在这里插入图描述
3、成功后通过浏览器输入ip:3300连接数据库
服务器:ip:mysql容器端口
用户名:root
密码:docker-compose中的设置的密码
如果连接成功直接进入主页面(可以操作数据库)。
如果连接失败,如下图所示,请参考4在这里插入图片描述4、如果连接失败,表示在docker-composer.yml中设置的mysql的root用户密码未生效。需要对容器的/etc/mysql/my.cnf(linux环境,本人的路径)添加下图红线的配置:skip-grant-tables
在这里插入图片描述
5、修改方式有多种:

	① 可以直接在容器中对文件进行修改(但是本人容器中不支持vi命令)。
	
	② 将文件映射到宿主机上进行修改,但是在docker-composer.yml文件的映射并未生效(研究了半天未解决。。。),只好退而求其次,使用docker cp命令将文件从容器中拷贝到宿主机进行修改,修改完后在拷贝回去。
		从容器中拷贝到宿主机上的命令:docker cp mysql:/etc/mysql/my.cnf 宿主机目录
		执行修改,添加skip-grant-tables配置
		从宿主机上拷贝到容器中的命令:docker cp 宿主机目录  mysql:/etc/mysql/my.cnf (拷贝回容器前最好对my.cnf源文件备份,后面还需要删除添加的配置)
		
    ③ 修改完成后,重启mysql容器。
    
    ④ 使用mysql -uroot -p连接mysql。
    	连接成功后,先查看mysql这个数据库中的user表下的root用户情况:

在这里插入图片描述
如果root用户时localhost的话,先执行下面一系列命令:

		 update user set host = '%' where host = 'localhost' and user = 'root';
		 flush privileges;
		 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
		 flush privileges;
	执行完成后即可。

6、此时在去phpadmin界面连接mysql数据库即可成功。
完成后记得去容器中将my.cnf文件的配置skip-grant-tables去了。这里不在详细介绍。

备注:以上仅是个人在配置mysql时遇到的问题,可能不够全面。欢迎大家分享遇到的问题,共同进步。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐