如何在Windows Docker容器中启用开发者模式以构建Flutter Windows应用
尝试在Windows主机的Windows Docker容器(mcr.microsoft.com/windows/servercore:ltsc2019)中构建Flutter Windows应用,执行flutter build windows时报错:
Building with plugins requires symlink support.
Please enable Developer Mode in your system settings. Run
start ms-settings:developers
to open settings.
已尝试通过修改注册表项HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock\AllowDevelopmentWithoutDevLicense和AllowAllTrustedApps启用开发者模式,但无效。当前Dockerfile内容如下:
FROM mcr.microsoft.com/windows/servercore:ltsc2019 # Use admin USER ContainerAdministrator # Download the Build Tools bootstrapper. ADD https://aka.ms/vs/17/release/vs_buildtools.exe vs_buildtools.exe # Install Build Tools with the Microsoft.VisualStudio.Workload.VCTools workload RUN (start /w vs_buildtools.exe --quiet --wait --norestart --nocache \ --installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" \ --add Microsoft.VisualStudio.Workload.VCTools \ --add Microsoft.VisualStudio.Component.VC.CMake.Project \ --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 \ --add Microsoft.VisualStudio.Component.Windows11SDK.22621 \ --add Microsoft.VisualStudio.Component.Windows10SDK.20348 \ || IF "%ERRORLEVEL%"=="3010" EXIT 0) # Cleanup RUN del /q vs_buildtools.exe # Install ninja-Build ADD https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip ninja.zip RUN powershell Expand-Archive C:\ninja.zip -DestinationPath C:\ninja; \ && setx path "%path%;C:\ninja" \ && del /q ninja.zip # Install mariadb-connector-c ADD https://dlm.mariadb.com/2862619/Connectors/c/connector-c-3.3.4/mariadb-connector-c-3.3.4-win64.msi mariadb-connector-c.msi RUN msiexec.exe /i "mariadb-connector-c.msi" /qn /norestart \ && del /q mariadb-connector-c.msi # Install git ADD https://github.com/git-for-windows/git/releases/download/v2.40.1.windows.1/MinGit-2.40.1-64-bit.zip MinGit.zip RUN powershell Expand-Archive C:\MinGit.zip -DestinationPath C:\MinGit; \ && setx /m PATH "%PATH%;C:\MinGit\cmd" \ && del /q MinGit.zip # Fix flutter "Error: Unable to find git in your PATH." RUN git config --system --add safe.directory "*" \ && git config --system http.sslcainfo 'C:\MinGit\mingw64\etc\ssl\certs\ca-bundle.crt' \ # RUN git config --system http.sslcainfo 'C:\MinGit\mingw64\ssl\certs\ca-bundle.crt' && git config --system http.sslverify false # Install Google Root R1 cert so pub.dartlang.org stays working ADD https://pki.goog/repo/certs/gtsr1.pem C:/TEMP/gtsr1.pem RUN powershell.exe -Command \ Import-Certificate -FilePath C:\TEMP\gtsr1.pem -CertStoreLocation Cert:\LocalMachine\Root # Install Flutter ADD https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_3.10.0-stable.zip flutter.zip RUN powershell Expand-Archive C:\flutter.zip -DestinationPath C:\; \ && setx /m path "%PATH%;C:\flutter\bin;C:\flutter\bin\cache\dart-sdk\bin;" \ && del /q flutter.zip # Restore default user USER ContainerUser # Enable developer mode RUN REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1" RUN REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowAllTrustedApps" /d "1" # Setup flutter RUN flutter config --no-analytics RUN flutter --disable-telemetry RUN dart --disable-analytics RUN flutter config --enable-windows-desktop RUN flutter doctor ENTRYPOINT [ "cmd" ] CMD [ "cmd" ]
问题根源在于Windows容器默认不支持创建符号链接,仅修改注册表无法解决,需从以下几个方面调整:
调整注册表修改时机与权限
将修改注册表的操作提前到切换回ContainerUser之前,用ContainerAdministrator权限执行,确保注册表项修改生效。同时添加启用符号链接支持的关键注册表项:RUN REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /t REG_DWORD /f /v "EnableLinkedConnections" /d "1" RUN REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1" RUN REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowAllTrustedApps" /d "1"启动容器时添加符号链接权限
运行容器时必须添加--privileged参数,确保容器拥有足够权限创建符号链接:docker run --privileged -it <你的镜像名称>临时跳过符号链接检查(可选)
如果上述配置仍有问题,可临时用以下命令跳过符号链接检查(不推荐长期使用):flutter build windows --no-symlink更新容器镜像
确保使用的servercore:ltsc2019镜像为最新版本,避免因系统组件缺失导致的符号链接支持问题。
内容的提问来源于stack exchange,提问作者enwi

