首页 > 解决方案 > 在 Windows Docker 映像上安装 MySQL

问题描述

有人成功地将 MySQL 添加到 Windows docker 映像中吗?我尝试了两种不同的方式将 MySQL 部署到我的映像中。

我尝试在非交互模式下使用 MySQL 中的 msi。在容器中根本不起作用。

通过powershell安装Mysql.msi时出现以下错误

我尝试提取 zip 以使用 mysqld 命令手动设置,但什么也没做。从字面上看,可执行文件的行为就像它们只是运行和退出(没有输出,什么都没有):

https://github.com/Somesh-K/Automation-Mysql/blob/main/1.mysql_setup_v2.ps1

这一切都很奇怪。

是的,我知道 Oracle 向 Docker hub 发布了一个非常好的 MySQL docker linux 容器。这行得通。问题在于,运行需要交互的 Windows 容器和 Linux 容器会给用户带来真正不必要的挫败感,因为这会导致两者之间的网络连接。

为我们的应用程序使用不同的后端(如 SQL 服务器)是不可行的,并且使用 .NET 核心而不是 .NET 框架是不可行的。为简化起见,我只想在基于 Windows 的 webserver docker 映像上安装 MySQL。使用上面链接中描述的两种方法似乎可行,但如前所述,它不起作用,并且当 MySQL 二进制文件在容器中运行时,它们的行为非常奇怪。

这是一个奇怪行为的例子:

为 Windows 安装 Docker 桌面

从 MySQL 下载 Win32 安装 zip 并放置在 C:\mydata

https://dev.mysql.com/downloads/mysql/

从 Docker Hub 中拉下 ASPNET 映像,运行它,然后打开 Powershell:

# docker pull mcr.microsoft.com/dotnet/framework/aspnet:4.8 
# docker run --name testweb -v C:\mydata:C:\mydata:R -d mcr.microsoft.com/dotnet/framework/aspnet:4.8
# docker exec -it testweb powershell
C:\ > cd C:\mydata
C:\mydata\ > Expand-archive -path .\mysql-5.7.36-winx64.zip .
C:\mydata\ > cd \mysql-5.7.36-winx64\bin
C:\mydata\mysql-5.7.36-winx64\bin\ > .\mysql.exe -version
[zero output, acts like it's an empty executable]

结果

容器上提取的 mysql bin 目录中的任何可执行文件/二进制文件都没有做任何事情。它们的行为就好像有人编写并执行了刚刚退出的程序。我以为我的安装 zip 不正确,所以我在常规的 Windows 10 工作站上提取了相同的 zip。所有的二进制文件至少返回错误或做一些事情。

这太奇怪了。任何帮助,将不胜感激。

标签: mysqlwindowsdockerinstallationcontainers

解决方案


下载这个可执行文件并将其放入我的容器中似乎可以解决问题:

https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe

把它放在我的容器上并启动它

C:\vcredist.exe /Q

执行此操作后,可执行文件开始工作:

C:\ > cmd.exe /C "C:\mysql\bin\mysqld" --initialize-insecure
C:\ > cmd.exe /C "C:\mysql\bin\mysqld" --install

C:\ > start-service mysql
C:\ > cmd.exe /C "C:\mysql\bin\mysql" -u root

推荐阅读