在Windows Docker镜像安装MySQL时二进制文件无响应问题求助
根因说明
你遇到的二进制文件无输出直接退出的问题核心是两个:
- 官方
aspnet:4.8基础镜像默认未预装MySQL 5.7依赖的Visual C++ 2013运行时,你的本地Win10环境已经预装过该组件所以可以正常运行,容器内缺少依赖导致程序启动直接崩溃,没有日志输出 - 你启动容器时给
C:\mydata挂载加了:R只读参数,MySQL运行需要写入数据、日志等文件,只读环境无法正常运行
可运行部署方案
准备文件
提前下载好两个文件放到本地构建目录:
- MySQL 5.7 Windows x64 zip安装包
- Visual C++ Redistributable for Visual Studio 2013 x64安装包
编写Dockerfile
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 # 复制安装包到容器内 WORKDIR C:\install COPY mysql-5.7.36-winx64.zip . COPY vcredist_x64.exe . # 安装VC++运行时依赖 RUN Start-Process -FilePath .\vcredist_x64.exe -ArgumentList "/install /quiet /norestart" -Wait # 解压并配置MySQL RUN Expand-Archive -Path .\mysql-5.7.36-winx64.zip -DestinationPath C:\ RUN Rename-Item C:\mysql-5.7.36-winx64 C:\mysql RUN setx /M PATH "%PATH%;C:\mysql\bin" # 初始化MySQL(--initialize-insecure会生成无密码的root账号,生产环境可自行调整参数) RUN mysqld --initialize-insecure --user=ContainerAdministrator # 暴露MySQL默认端口 EXPOSE 3306
运行验证
- 执行
docker build -t aspnet-mysql .构建镜像 - 启动容器:
docker run --name testweb -d aspnet-mysql - 进入容器执行
mysql -V即可正常返回版本信息
其他注意点
- 如果你要使用MSI方式安装,启动容器时需要指定
--user ContainerAdministrator提权,非交互安装时取消勾选Visual Studio相关可选组件,仅安装核心服务即可 - 生产环境建议将MySQL的
C:\mysql\data目录挂载到宿主机,避免容器销毁导致数据丢失 - 需要同时运行IIS和MySQL的话,可以用nssm工具把MySQL注册为Windows服务,容器启动时自动拉起两个进程
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

