CSDN 中文章不一定能及时更新,欢迎点击前往我的博客查看最新版本:许盛的博客
最近新电脑到了,要用 docker
在本地跑个 mysql
开发用一下,但是发现以前的常规套路不管用了,踩了不少坑才解决问题,记录一下以作备忘。
镜像问题
在 docker hub
中有一个 mysql
镜像,这是以前用的比较多的镜像,我到现在才知道原来这个镜像不是 mysql
官方的,而是 docker
官方的,这个镜像并没有提供 arm
版本的,如下:
换成 mysql
官方提供的镜像 mysql/mysql-server
即可:
docker-compose.yml 文件
本地跑这种基础服务类的容器时,我不太喜欢直接 docker run
,使用 docker-compose
更加方便管理一点,准备 docker-compose.yml
文件如下:
version: '3.1'
services:
mysql:
image: mysql/mysql-server:8.0.27
container_name: mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- '3306:3306'
volumes:
- ./data:/var/lib/mysql
然后执行 docker-compose up -d
命令即可。
数据持久化问题
上面的 docker-compose.yml
文件中,有一个 volumes
配置,然后容器一直无法启动成功,这是因为这个挂载的宿主机目录, docker
可能并没有权限,需要设置一下。
在设置中找到 FILE SHARING
部分,然后加入你希望挂载的宿主机目录即可。
mysql 访问问题
和 mysql
镜像不同, mysql-server
启动的容器默认只允许 [localhost](http://localhost)
访问,所以我们在容器外部连 mysql
会被拒绝,需要进容器修改一下。
# 进入容器
docker exec -it mysql bash
# 进入 mysql
mysql -uroot -p
使用 select host,user from mysql.user;
可以看到:
如上所示,默认情况下 root
用户只允许 [localhost](http://localhost)
访问,修改修改就好了。
# 将 host 修改为 %
update user set host = '%' where user = 'root';
# 刷新
flush privileges;
此时在容器外部就可以访问了 💪🏻。