You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose启动自定义MySQL 8.2.0镜像失败求助

问题排查与修复方案

1. 脚本解释器错误 /bin/sh^M: bad interpreter

原因

你的init_script.sh脚本使用了Windows风格的CRLF换行符(\r\n),而Linux容器中的Shell仅识别Unix风格的LF换行符(\n)。错误中的^M就是Windows换行符里的\r,导致系统无法匹配到正确的解释器路径。

修复方法

  • 本地转换换行符:用文本编辑器打开脚本,将换行格式改为LF:
    • Notepad++:编辑 → 文档格式转换 → 转换为UNIX格式
    • VS Code:点击右下角的CRLF选项,选择LF后保存
  • Dockerfile自动处理:在复制脚本后添加换行符转换步骤(需先安装工具):
    FROM bitnami/mysql:8.2.0-debian-11-r2
    RUN apt-get update && apt-get install -y dos2unix && rm -rf /var/lib/apt/lists/*
    COPY init_script.sh /docker-entrypoint-initdb.d/
    RUN dos2unix /docker-entrypoint-initdb.d/init_script.sh
    

2. MySQL端口映射错误(映射为5432)

原因

MySQL默认端口为3306,你将其映射到了主机的5432端口(PostgreSQL默认端口),会引发两种问题:

  • 若主机已运行PostgreSQL,会出现端口冲突导致容器启动失败
  • 客户端连接时用错端口,无法正常访问MySQL服务

修复方法

修改Docker Compose的端口映射配置,将主机端口改为3306(或其他未被占用的端口):

services:
  mysql:
    build: .
    ports:
      - "3306:3306"  # 格式为「主机端口:容器端口」,容器端必须保持3306
    # 其他配置项...

3. 初始化脚本中创建用户与授权不匹配

原因

脚本里CREATE USER语句的用户标识(含主机范围,如@localhost、@%)和GRANT语句中的用户标识不一致,会导致授权无效或直接报错。

修复方法

确保创建用户和授权的用户标识完全一致:

  • 错误示例:
    CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
    GRANT ALL ON mydb.* TO 'myuser'@'%';  # 主机范围不匹配
    
  • 正确示例:
    # 创建允许任意主机连接的用户
    CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
    # 给该用户授权指定数据库的所有权限
    GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%';
    FLUSH PRIVILEGES;  # 刷新权限使设置生效
    

内容的提问来源于stack exchange,提问作者user1999453

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:41:04