我想在Windows容器中运行R。它在servercore
中有效,但在nanoserver
中无效。
为了解决这个问题,我正在尝试一个多阶段构建,其中R安装在servercore映像中,然后复制到nanoserver映像。不幸的是,R退出时出现了我不熟悉的错误代码(3221225781)。
我使用Process Explorer在nanoserver中确定了缺少的运行时dll,并从servercore复制了这些文件。这给出了新的错误代码(3221226625)。
我没有得到任何有益的错误,所以我很困惑。任何帮助将不胜感激。
我的完整Dockerfile在这篇文章的结尾。我用命令构建
docker build --build-arg R_VERSION=3.6.0 --tag r-base:3.6.0 .
我使用命令运行图像
docker run -it r-base:3.6.0
我不使用--rm
标志,因为我想用docker container ls
查看退出代码。
FROM mcr.microsoft.com/windows/servercore:1809 AS builder
ARG R_VERSION
ENV R_VERSION=${R_VERSION}
RUN curl.exe -o R-%R_VERSION%-win.exe https://cran.r-project.org/bin/windows/base/old/%R_VERSION%/R-%R_VERSION%-win.exe
RUN R-%R_VERSION%-win.exe /VERYSILENT /DIR="C:\R\"
FROM mcr.microsoft.com/windows/nanoserver:1809
COPY --from=builder C:\\R C:\\R
# System runtime dependencies
COPY --from=builder \
C:\\Windows\\System32\\advapi32.dll \
C:\\Windows\\System32\\clbcatq.dll \
C:\\Windows\\System32\\comdlg32.dll \
C:\\Windows\\System32\\CoreMessaging.dll \
C:\\Windows\\System32\\cryotso.dll \
C:\\Windows\\System32\\gdi32.dll \
C:\\Windows\\System32\\gdi32full.dll \
C:\\Windows\\System32\\imm32.dll \
C:\\Windows\\System32\\kernel.appcore.dll \
C:\\Windows\\System32\\msimg32.dll \
C:\\Windows\\System32\\msvct.dll \
C:\\Windows\\System32\\ole32.dll \
C:\\Windows\\System32\\powprof.dll \
C:\\Windows\\System32\\rpcrt.dll \
C:\\Windows\\System32\\shell32.dll \
C:\\Windows\\System32\\shlwapi.dll \
C:\\Windows\\System32\\TextInputFramework.dll \
C:\\Windows\\System32\\umpdc.dll \
C:\\Windows\\System32\\user32.dll \
C:\\Windows\\System32\\uxtheme.dll \
C:\\Windows\\System32\\version.dll \
C:\\Windows\\System32\\win32u.dll \
C:\\Windows\\System32\\windows.storage.dll \
C:\\Windows\\System32\\winmm.dll \
C:\\Windows\\System32\\winmmbase.dll \
C:\\Windows\\System32/
CMD [ "C:/R/bin/R.exe" ]