mysql - 在 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。所有的二进制文件至少返回错误或做一些事情。
这太奇怪了。任何帮助,将不胜感激。
解决方案
下载这个可执行文件并将其放入我的容器中似乎可以解决问题:
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
推荐阅读
- android - 我无法理解为什么凌空无法在我的应用程序中获得 Json 获取请求的响应?
- javascript - 为什么 this.tail 在我的 Linkedlist 类中更改 this.head 的属性?
- bash - 如何从 txt 文件中查找字符串并将其存储在 BASH 中的变量中
- python - How to modify the syntax of data serie?
- powerbi - 基于 2 个条件的条件格式
- cmp - Adsense 同意和分析
- python - 如何从 csv 文件命名 matplotlib/geopandas 地图中的每个城市?
- scalacheck - 您如何设置所需的成功 scalacheck 测试的数量
- javascript - Puppeteer - 通过 xpath 获取输入元素,然后单击并键入
- android - Jetpack compose:如何强制将下拉菜单锚定在其父级下方?