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"
相关推荐
杨充8 小时前
1.1 数据编码设计原理
linux·运维·网络·底层原理·数据编码
一只鹿鹿鹿9 小时前
信息化项目管理规范(参考Word文件)
java·大数据·运维·开发语言·数据库
wanhengidc9 小时前
双线服务器有哪些优点?
运维·服务器
蜀道山老天师9 小时前
Docker Compose 多容器编排实战:LNMP、Tomcat 集群、云桌面、Portainer、Zabbix 一键部署
运维·docker·容器·tomcat·zabbix
jscxy52069 小时前
ospf综合实验
运维·服务器·网络
apcipot_rain10 小时前
计科八股20260529——连接协议连接线程池、模块拆解模块通信、WebSocket
运维·服务器·网络·八股
GIS数据转换器10 小时前
智慧能源管理平台
java·大数据·运维·人工智能·无人机
“码”力全开10 小时前
解构企业级安防中台:基于Docker容器化与GB28181/RTSP多协议汇聚的边缘计算AI视频管理平台(全量源码交付)
人工智能·docker·边缘计算
剑神一笑10 小时前
Linux lsof 命令深度解析:从文件描述符到进程追踪
linux·运维·php
qq36219670511 小时前
facebook是什么意思?新手从零到精通完全指南
运维·服务器·facebook