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"
相关推荐
谷隐凡二5 分钟前
Kubernetes Route控制器简单介绍
java·容器·kubernetes
ysy164806723920 分钟前
Docker安装(Windows版)
windows·docker·容器
root666/24 分钟前
【后端开发-nginx】proxy_pass和proxy_redirect参数作用
运维·nginx
2501_940414081 小时前
搞了一次平台工程,我把本地的 Docker Desktop 彻底卸了
运维·docker·容器
看见繁华1 小时前
Linux 交叉编译实践笔记
linux·运维·笔记
咕噜企业分发小米1 小时前
直播云服务器安全防护有哪些最新的技术趋势?
运维·服务器·安全
tianyuanwo1 小时前
深入解析CentOS 8中NetworkManager重启后DNS配置被覆盖的机制与解决方案
linux·运维·centos·dns
cly12 小时前
Ansible自动化(十五):加解密详解
运维·自动化·ansible
程序员zgh2 小时前
Linux 系统调用
linux·运维·服务器·c语言·c++·系统安全
cly12 小时前
Ansible自动化(十二):Jinja2过滤器
运维·自动化·ansible