Windows环境Docker中Access Database无法连接问题排查
在Windows Docker中运行.NET Framework ASP.NET应用时Access数据库连接无响应问题
在Windows环境的Docker中运行基于.NET Framework的ASP.NET应用,通过以下Dockerfile安装Access Database Engine后,执行数据库连接代码时调用con.Open()程序无响应且未抛出任何异常,该问题始于微软更新Microsoft Access Database Engine 2016 Redistributable的安装链接之后。
Dockerfile内容
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2022 AS build SHELL ["powershell"] ### 32 Bit Access ADD https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/accessdatabaseengine.exe "C:/setup/AccessDatabaseEngine.exe" RUN start-process -Filepath "C:/setup/AccessDatabaseEngine.exe" -ArgumentList @('/quiet') -Wait; \ Remove-Item -Force "C:/setup/AccessDatabaseEngine.exe" ## 64 Bit Access ADD https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/accessdatabaseengine_X64.exe "C:/setup/AccessDatabaseEngine_X64.exe" RUN start-process -Filepath "C:/setup/AccessDatabaseEngine_X64.exe" -ArgumentList @('/quiet') -Wait; \ Remove-Item -Force "C:/setup/AccessDatabaseEngine_X64.exe" WORKDIR /inetpub/wwwroot # Start IIS Remote Management and monitor IIS ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]; EXPOSE 80
数据库连接代码
//2. Establish a connection to the database and execute the insert commands try { var con = new OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=newfile.mdb"); con.Open(); } catch (Exception ex) { throw ex; } //3. write one row var createTableScript = "INSERT INTO testTable(name, code, remarks) VALUES ('testing name', 1234, 'test remark');"; // Create a command and execute it using (var cmd = new OleDbCommand(createTableScript, con)) { try { cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } }
已尝试的解决方案
- 将Provider从
Microsoft.Jet.OLEDB.4.0更换为Microsoft.ACE.OLEDB.16.0或Microsoft.ACE.OLEDB.12.0,均出现con.Open()无响应且无报错的情况; - 移除安装命令中的
/quiet参数,安装32位和64位Access Database Engine均无报错,但问题仍存在; - 使用
Microsoft.Jet.OLEDB.4.0作为Provider时,提示该组件未在服务器上注册; - 更换基础镜像为
aspnet:4.7.2-windowsservercore-ltsc2019,问题未解决; - 确认MDB文件无访问限制。
现寻求解决该连接问题的有效方案。
内容的提问来源于stack exchange,提问作者David Geo
相关产品推荐
相关产品推荐

