Docker启动mysql镜像报错3306端口被占用的解决咨询
解决Docker中MySQL端口重复占用问题
针对你的问题,有三种可行的解决方式:
1. 修改现有mysql/mysql-server:8.0容器的端口映射
Docker容器创建后无法直接修改端口映射规则,需重新创建容器并指定新的映射关系:
- 停止目标容器:
docker stop <container-name> - 删除该容器:
docker rm <container-name> - 重新创建容器时,将容器内3306端口映射到宿主机的其他空闲端口(比如3307):
docker run -d -p 3307:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=你的密码 mysql/mysql-server:8.0 - 后续启动该容器只需执行
docker start mysql8,不会再占用宿主机3306端口。
2. 给新运行的MySQL容器指定其他端口映射
如果不想改动现有mysql/mysql-server:8.0容器,启动你需要的MySQL镜像时,直接映射到宿主机未被占用的端口(比如3308):
docker run -d -p 3308:3306 --name 你的容器名 -e MYSQL_ROOT_PASSWORD=你的密码 你的mysql镜像名
3. 禁用mysql/mysql-server:8.0容器的自动启动
如果该容器是自动启动导致每次抢占端口,可调整它的重启策略:
- 查看容器当前的重启策略:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' <container-name> - 将重启策略改为
no,避免容器自动启动:docker update --restart=no <container-name> - 之后只有你手动执行
docker start <container-name>时,该容器才会启动,不会自动占用3306端口。
内容的提问来源于stack exchange,提问作者Андрей Рубан
相关产品推荐
相关产品推荐

