在Docker中安装MySQL时3306端口占用问题

发布于:2025-09-04 ⋅ 阅读:(29) ⋅ 点赞:(0)

问题

我个人在学习黑马的 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

就可以看见这个表了


网站公告

今日签到

点亮在社区的每一天
去签到