docker-compose端口冲突问题

报错信息:

Error response from daemon: ports are not available: exposing port TCP 0.0.0.0:3306 -> 127.0.0.1:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

**这个错误提示表明端口 3306 已被占用,导致 Docker 容器无法绑定到该端口。**这通常是因为已经有另一个程序(最常见的是 MySQL 服务器)正在使用 3306 端口。

解决方法如下:

  1. 找出占用 3306 端口的程序
    • 在 Windows 上,可以使用以下命令:

netstat -ano | findstr :3306

    • 到对应的 PID(最后一列数字),然后在任务管理器中结束该进程
  1. 更换端口映射

如果需要保留当前占用 3306 端口的程序,可以在启动容器时使用不同的端口映射:

docker run -p 3307:3306 [其他参数] [镜像名]

这样就会将容器的 3306 端口映射到主机的 3307 端口

  1. 停止并禁用系统中已安装的 MySQL 服务

如果是本地安装的 MySQL 占用了端口,可以在服务管理中停止并禁用它

选择适合你情况的方法即可解决端口冲突问题。

参考我的docker-compose.yml文件:

如果想要避免和主机原先打开的mysql端口冲突的话

1.可以在任务管理器中结束主机里的mysql进程

2.修改端口映射 3307:3306

复制代码
version: '3.7'

networks:
  todolist:
    driver: bridge

services:
  mysql:
    container_name: mysql
    image: mysql:latest
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=todolist
      - MYSQL_USER=todolist
      - MYSQL_PASSWORD=todolist
      - TZ=Asia/Shanghai
#    volumes:
#      - ./config/sql:/docker-entrypoint-initdb.d/
    ports:
      - "3306:3306"

  redis:
    container_name: redis
    image: redis:latest
    restart: always
    volumes:
      - /usr/local/redis:/usr/local/redis
    ports:
      - "6379:6379"
相关推荐
hi_ro_a3 小时前
Linux基础开发工具详解
linux·运维·服务器
xrlfreedom3 小时前
大厂 MCP 面试实录:本地 Server 远程化改造中的技术选型与落地实践
docker·json schema·mcp
嵌入式阿蔡3 小时前
Linux_01:交叉编译与开发环境实战——从单片机跨到 Linux 的第一道坎
linux·运维·网络·单片机·嵌入式硬件·嵌入式实时数据库
红球yyds3 小时前
用anisble搭建k8s集群及原理
云原生·容器·kubernetes
Pocker_Spades_A3 小时前
终端里也能斗地主:Linux部署Ratel,从本地对战到公网联机
linux·运维·服务器
佳児素花痴╮4 小时前
C语言链接库
linux·运维·服务器
云飞云共享云桌面4 小时前
苏州昆山精密机械加工厂研发部门10个SolidWorks可以部署云飞云共享云桌面吗?
大数据·运维·服务器·自动化·汽车·制造
小嵌同学5 小时前
Linux 内核中的 Per-CPU 机制详解
linux·运维·arm开发·嵌入式
云飞云共享云桌面5 小时前
自动化设备厂 10 人研发团队,如何共用一台服务器做 SolidWorks 建模?
运维·服务器·网络·3d·自动化·制造
QH139292318805 小时前
NVIDIA H200 H300服务器
运维·服务器·开发语言·网络·信息与通信