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"
相关推荐
xu_yule5 小时前
Linux_16(多线程)信号量+基于环形队列的生成消费模型+自选锁+读写锁
linux·运维·服务器
行初心6 小时前
uos基础 systemctl 查看unit的详细配置
运维
eyuiomvtywn6 小时前
阿里云DNS解析Vercel部署项目的域名
运维·服务器·阿里云
4t4run6 小时前
25、Linux 特殊权限
linux·运维
S***y3966 小时前
DevOps监控告警体系
运维·devops
HUT_Tyne2657 小时前
Linux 快速入门
linux·运维·服务器
鸠摩智首席音效师7 小时前
如何在 Linux 中使用 dd 命令 ?
linux·运维·服务器
一夜空中最亮的星一8 小时前
【Linux】ubuntu24.04 安装docker
linux·docker·eureka
炸裂狸花猫8 小时前
开源域名证书工具 - cert-manager
云原生·容器·kubernetes·开源·cert-manager
会飞的小蛮猪8 小时前
Ubuntu24.04基于Docker部署K8s(使用私服部署)
经验分享·docker·云原生·容器·kubernetes