如何在Nanoserver Windows容器中运行R

时间:2019-09-17 19:05:59

标签: docker windows-container nano-server

我想在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" ]

0 个答案:

没有答案