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"
相关推荐
考虑考虑6 小时前
docker compose环境变量替换
运维·后端·自动化运维
Java陈序员7 小时前
轻量运维面板!一款现代化的服务器控制面板工具!
运维·服务器·python·react.js·github
bosins7 小时前
WSL 迁移指南:如何将 Linux 环境完整复制到另一台电脑
linux·运维·服务器
IT利刃出鞘7 小时前
Docker Compose--安装WordPress--方法/示例
运维·docker·容器
handler019 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
新时代牛马9 小时前
实时 Linux:PREEMPT_RT、延迟来源与观测
linux·运维·服务器
zhexunnb10 小时前
深挖SAP系统模块价值,助力无锡制造企业打通数字化全链路
运维
weipt10 小时前
利用wsl给windows电脑上安装一个ubuntu
linux·运维·ubuntu
jarreyer10 小时前
【软件操作】加快资源管理器打开速度
运维
楚疏笃11 小时前
linux下给OpenCloudOS根目录扩容
linux·运维·服务器