gpt4 book ai didi

r - R包安装返回错误时让Docker镜像构建失败

转载 作者:行者123 更新时间:2023-12-01 03:15:04 25 4
gpt4 key购买 nike

我正在尝试使用 Dockerfile 创建基于 Rocker 的自定义 Docker 镜像。在 Dockerfile 中,我使用以下命令从自定义 GitLab 服务器中提取我自己的 R 包:
RUN R -e "devtools::install_git('[custom gitlab server]', quiet = FALSE)"
一切正常,但我注意到当 GitLab 服务器关闭时,或者运行 Docker 的机器内存不足时,软件包无法正确安装并在 R 控制台中返回错误消息。这种行为是意料之中的。但是,Docker 不会注意到 R 产生的错误并继续评估 Dockerfile 的其余部分。我希望 Docker 在发生这种情况时无法构建镜像。通过这种方式,我最终可以防止 Kubernetes 自动部署不完整的 Docker 容器。

到目前为止,我已经想到了两个潜在的解决方案,但我正在努力执行:

  • R级 : 包裹 tryCatch()附近devtools::install_git来捕捉错误。但是然后呢?使用 stop ?这会导致 Docker 构建过程也停止吗?可以withCallingHandlers()使用?
  • Dockerfile 级别 : 使用shell命令检查错误?我找不到 R --help 的内容因为我目前没有 Linux 机器。所以我不确定是什么 R -e实际上是(执行我假设)以及哪些其他命令可以与 R 一起传递.

  • 好像讨论过类似的问题 herehere ,但我不明白他们是如何解决的。

    因此,如何确保在没有自定义包的情况下没有 Docker 镜像最终在 Kubernetes 集群上运行?

    最佳答案

    一旦Dockerfile 中的命令之一,Docker 构建过程应该停止。返回非零状态。
    install_git当软件包未成功安装时,似乎不会抛出错误,因此继续执行。

    一个明显的方法是将安装包装在专用 R 中。脚本,如果它没有成功完成,则会抛出一个错误,这将停止构建。

    所以我会建议这样的事情......

    创建安装脚本 install_gitlab.R :

    ### file install_gitlab.R

    ## change repo- and package name!!

    repo <- '[custom gitlab server]'

    pkgname <- 'testpackage'

    devtools::install_git(repo, quiet = FALSE)

    stopifnot(pkgname %in% installed.packages()[,'Package'])

    修改您的 Dockerfile相应地(替换 install_git 行):
    ...

    Add install_gitlab.R /runscripts/install_gitlab.R

    RUN Rscript /runscripts/install_gitlab.R

    ...

    要记住的一件事是,这种方法假定您尝试安装的软件包是 不是 在调用命令之前安装。

    关于r - R包安装返回错误时让Docker镜像构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49129223/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com