在Docker中安装MySQL时3306端口占用问题
问题
我个人在学习黑马的 SpringCloud(导入黑马商城) 中,在使用docker执行以下命令时,出现了问题
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v /root/mysql/data:/var/lib/mysql \-v /root/mysql/conf:/etc/mysql/conf.d \-v /root/mysql/init:/docker-entrypoint-initdb.d \--network hm-net\mysql
这个命令是为了安装MySQL,但是我在执行后出现了以下错误
docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql (779d5c08c621086cb08087d9df11f104ecab60ce3e3b751ba0ae8c97bf18da23): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use.
问了ai,ai解释了错误原因:
你宿主机(Host)的 3306 端口已经被另一个程序占用了,Docker 无法再将这个端口映射到你的 MySQL 容器。
解决方法
首先安装 lsof,因为我这里学的是CentOS系统,所以命令是这样的:
sudo yum install -y lsof
如果是别的系统再百度一下
有了这个工具之后我们就可以执行这个命令:
sudo systemctl stop mysql
这条命令会通知 systemd
去优雅地停止 mysqld
进程及其所有相关进程,并且它不会自动重启
然后我们再执行一开始那个安装命令
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v /root/mysql/data:/var/lib/mysql \-v /root/mysql/conf:/etc/mysql/conf.d \-v /root/mysql/init:/docker-entrypoint-initdb.d \--network hm-net\mysql
这时我们在执行 docker ps,就可以看见
说明我们已经下载成功了
然后我们去datagrip里面连接一下这个mysql
就可以看见这个表了