【问题标题】:Installed R packages in Dockerfile won't be found when running container运行容器时找不到 Dockerfile 中已安装的 R 包
【发布时间】:2020-02-17 23:21:37
【问题描述】:

我正在尝试在 Python Docker 映像中安装多个 R 包。我有这么小的Dockerfile

# Python 3.7.5
FROM python:3.7.5
ENV PYTHONUNBUFFERED 1

# Install R 3.6
RUN echo 'deb http://cran.rstudio.com/bin/linux/debian buster-cran35/' >> /etc/apt/sources.list
RUN apt install dirmngr
RUN apt-key adv --keyserver keys.gnupg.net --recv-key 'E19F5F87128899B192B1A2C2AD5F960A256A04AF'
RUN apt update
RUN apt install -y r-base
 
# Install R dependencies
RUN R -e "install.packages('BiocManager', dependencies=TRUE, repos='http://cran.rstudio.com/')"

它不会抛出任何错误。但是当我运行docker container exec -it <my container> bash 并执行以下操作时:

Rscript -e 'installed.packages()' | grep BiocManager

没有任何结果。我不知道这是否适用,但在构建过程中会抛出:

下载的源码包在

'/tmp/Rtmp7jBLWQ/downloaded_pa​​ckages'

也许它正在将软件包安装在临时文件夹中是问题所在。有没有什么方法可以安装 R 包而不需要基于R-base 图像并使用install2.r

【问题讨论】:

  • 我不知道,但您可能需要使用.libPaths() 检查新软件包的安装位置。 (您可以在 install.packages(..., lib="/some/path") 中设置它。)要知道 R 将查找的位置,您可能需要先运行 docker container exec -it name Rscript -e '.libPaths()'
  • 我喜欢使用 littler 包在 Docker 镜像上安装 R 包,因此它会抛出一个错误,停止构建过程中的该步骤,而不是绕过它。 dirk.eddelbuettel.com/code/littler.html
  • 感谢大家!我试一试告诉你

标签: python r docker dockerfile


【解决方案1】:

真可惜...我有一个带有 build: . 子句的 docker-compose,但我忘记运行 docker-compose build。这就是更改不适用的原因。

但是我使用r-base image 以更简单的方式安装依赖项。我最后的Dockerfile 是:

FROM r-base:3.6.2

# Install R dependencies
RUN install2.r --error BiocManager

# Install Python 3.7
RUN apt install -y python3.7 python3-pip

【讨论】:

    猜你喜欢
    • 2017-10-01
    • 2019-06-08
    • 2016-01-04
    • 2021-07-05
    • 2012-05-30
    • 2021-11-07
    • 1970-01-01
    • 2020-02-14
    • 2022-07-28
    相关资源
    最近更新 更多