问题描述
这一段时间,学习了黑马的一个的SpringCloud项目——学成在线。我将项目中需要的组件都放在了我的一台虚拟机上,用docker的方式。
但是发现,每次启动的时候MySQL容器经常失败,报错如下:
大概是端口占用......
解决办法
实际上解决这个问题也很容易
一、暴力
找到占用3306端口的进程,然后kill即可
我们先使用命令,找到所有进程的端口
netstat -tanlp
然后直接使用 kill 命令
# 1837 -- 进程号
kill 1837
再重新启动mysql即可
# 0c4e5bdc6f7e -- 通过docker ps -a 查看到的容器的ID
docker start 0c4e5bdc6f7e
但是,这样子做,对于我来说还是有点治标不治本! 因为如果这样子处理的话,相当于每次启动vm的时候,都要重复一遍上述的工作。
因为,我的docker没有自启动,而这个 mariadb(我也不知道是怎么来的~~~可能是之前的机子有禅道,禅道用的数据库就是mariadb)在启动VM的时候就启动了,3306端口先被占用了。
二、卸载mariadb
由于我的端口占用是禅道引起的,所以我直接卸载禅道即可!
# 停止服务
/opt/zbox/zbox stop
cd /opt
rm -rf /zbox
停止服务,删除zbox目录即可卸载。
三、重新指定这个MySQL的端口
可以把之前的mysql容器删除了,再重新创建一个新的,如下:
docker run --name mysql \
--restart=always \
-e MYSQL_ROOT_PASSWORD=888888 \
-v /home/lcxz8686/DockerContainerProperties/mysql/data:/var/lib/mysql \
-v /home/lcxz8686/DockerContainerProperties/mysql/conf:/etc/mysql/conf.d \
-p 3309:3306 \
-d \
mysql:8.0.30
如果不想删除,可以这样子做:
先进入容器内部
docker exec -it mysql /bin/bash
将容器里面的 /etc/mysql/my.cnf 文件复制出来修改(原因是docker容器内部大多数不支持vim命令,下载安装比较麻烦!!!)如果里面没有my.cnf就在 CentOS 上面创建一个,编写好,再怼回去。
# 容器复制命令 -- 需要退出容器
docker cp mysql:/etc/mysql/my.cnf /etc/mysql
修改完了再cp回去
docker cp my.cnf mysql:/etc/mysql/
再重启该容器即可!!!