如何从ubuntu安装R包到docker容器

9nvpjoqh  于 2023-05-11  发布在  Docker
关注(0)|答案(1)|浏览(210)

我是Docker的新手。我正在尝试创建一个运行Snakemake管道的容器。这个管道将包含R和Python脚本。最后,我需要添加conda环境,克隆并构建git hub repo。但现在,我只是想让我的python和R包安装正确。
我开始遵循this问题的建议,创建一个既有Python又有R的环境。
这是我的Dockerfile。

FROM ubuntu:latest

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends build-essential r-base python3.9 python3-pip python3-setuptools python3-dev

WORKDIR /app

RUN pip3 install biopython
RUN pip3 install pandas
RUN pip3 install numpy

RUN Rscript -e "install.packages('tidyverse')"
RUN Rscript -e "install.packages('dplyr')"
RUN Rscript -e "install.packages('testit')"
RUN Rscript -e "install.packages('stringr')"
RUN Rscript -e "install.packages('BiocParallel')"
RUN Rscript -e "install.packages('MPRAnalyze')"

COPY test.R /app

CMD ["Rscript", "test.R"]

test.R脚本包含以下内容:

library(dplyr)
print("dplyr working!")
library(testit)
print("testit working!")
library(stringr)
print("stringr working!")
library(tidyverse)
print("tidyverse working!")
library(BiocParallel)
print("BiocParallel working!")
library(MPRAnalyze)
print("MPRAnalyze working!")

当我运行docker build时,它似乎工作得很好。一切安装。

=> [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 706B                                       0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest           1.3s
 => [ 1/13] FROM docker.io/library/ubuntu:latest@sha256:dfd64a3b4296d8c9b  0.0s
 => [internal] load build context                                          0.0s
 => => transferring context: 65B                                           0.0s
 => CACHED [ 2/13] RUN apt-get update && apt-get install -y --no-install-  0.0s
 => CACHED [ 3/13] WORKDIR /app                                            0.0s
 => CACHED [ 4/13] RUN pip3 install biopython                              0.0s
 => CACHED [ 5/13] RUN pip3 install pandas                                 0.0s
 => CACHED [ 6/13] RUN pip3 install numpy                                  0.0s
 => [ 7/13] RUN Rscript -e "install.packages('tidyverse')"               893.1s
 => [ 8/13] RUN Rscript -e "install.packages('dplyr')"                    12.1s
 => [ 9/13] RUN Rscript -e "install.packages('testit')"                    2.8s 
 => [10/13] RUN Rscript -e "install.packages('stringr')"                   4.0s 
 => [11/13] RUN Rscript -e "install.packages('BiocParallel')"              1.4s 
 => [12/13] RUN Rscript -e "install.packages('MPRAnalyze')"                1.4s 
 => [13/13] COPY test.R /app                                               0.0s 
 => exporting to image                                                     1.3s 
 => => exporting layers                                                    1.3s 
 => => writing image sha256:328a4d8297eb16cef5f415b1067a1592d538db3ce15f9  0.0s
 => => naming to docker.io/library/wut

但是当我尝试运行docker run时,它看起来不像是在工作。

Attaching package: 'dplyr'

The following objects are masked from 'package:stats':

    filter, lag

The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union

[1] "dplyr working!"
[1] "testit working!"
[1] "stringr working!"
Error in library(tidyverse) : there is no package called 'tidyverse'
Execution halted

你知道这是怎么回事吗?我对解决这个问题的新方法持开放态度,只要我最终能安装一个conda环境并克隆github repo(上面的链接)。

bq9c1y66

bq9c1y661#

我解决这个问题的方法是使用Dockerfile并从中构建映像。所有软件包看起来都安装成功了,正如您在上面的输出中所指出的那样。
当我启动一个容器时,我可以注意到tidyverse包丢失了。当我尝试以交互方式安装它时,问题就暴露了:

➜ docker run -it test bash --login
root@aee05f0e225e:/app# R

R version 4.1.2 (2021-11-01) -- "Bird Hippie"

...

> library(tidyverse)
Error in library(tidyverse) : there is no package called 'tidyverse'
> install.packages("tidyverse")
Installing package into '/usr/local/lib/R/site-library'
(as 'lib' is unspecified)
also installing the dependencies 'gargle', 'curl', 'ids', 'openssl', 'systemfonts', 'textshaping', 'googledrive', 'googlesheets4', 'httr', 'ragg', 'rvest', 'xml2'

...

* installing *source* package 'curl' ...
** package 'curl' successfully unpacked and MD5 sums checked
** using staged installation
Using PKG_CFLAGS=
Using PKG_LIBS=-lcurl
--------------------------- [ANTICONF] --------------------------------
Configuration failed because libcurl was not found. Try installing:
 * deb: libcurl4-openssl-dev (Debian, Ubuntu, etc)
 * rpm: libcurl-devel (Fedora, CentOS, RHEL)
If libcurl is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a libcurl.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
-------------------------- [ERROR MESSAGE] ---------------------------
<stdin>:1:10: fatal error: curl/curl.h: No such file or directory
compilation terminated.
--------------------------------------------------------------------
ERROR: configuration failed for package 'curl'
* removing '/usr/local/lib/R/site-library/curl'
* installing *source* package 'openssl' ...
** package 'openssl' successfully unpacked and MD5 sums checked
** using staged installation
Using PKG_CFLAGS=
--------------------------- [ANTICONF] --------------------------------
Configuration failed because openssl was not found. Try installing:
 * deb: libssl-dev (Debian, Ubuntu, etc)
 * rpm: openssl-devel (Fedora, CentOS, RHEL)
 * csw: libssl_dev (Solaris)
 * brew: openssl (Mac OSX)
If openssl is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a openssl.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
-------------------------- [ERROR MESSAGE] ---------------------------
tools/version.c:1:10: fatal error: openssl/opensslv.h: No such file or directory
    1 | #include <openssl/opensslv.h>
      |          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
--------------------------------------------------------------------
ERROR: configuration failed for package 'openssl'
* removing '/usr/local/lib/R/site-library/openssl'
* installing *source* package 'systemfonts' ...
** package 'systemfonts' successfully unpacked and MD5 sums checked
** using staged installation
Using PKG_CFLAGS=
Using PKG_LIBS=-lfontconfig -lfreetype
--------------------------- [ANTICONF] --------------------------------
Configuration failed to find the fontconfig freetype2 library. Try installing:
 * deb: libfontconfig1-dev (Debian, Ubuntu, etc)
 * rpm: fontconfig-devel (Fedora, EPEL)
 * csw: fontconfig_dev (Solaris)
 * brew: freetype (OSX)
If fontconfig freetype2 is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a fontconfig freetype2.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
-------------------------- [ERROR MESSAGE] ---------------------------
<stdin>:1:10: fatal error: fontconfig/fontconfig.h: No such file or directory
compilation terminated.
--------------------------------------------------------------------
ERROR: configuration failed for package 'systemfonts'
* removing '/usr/local/lib/R/site-library/systemfonts'
* installing *source* package 'xml2' ...
** package 'xml2' successfully unpacked and MD5 sums checked
** using staged installation
Using PKG_CFLAGS=
Using PKG_LIBS=-lxml2
------------------------- ANTICONF ERROR ---------------------------
Configuration failed because libxml-2.0 was not found. Try installing:
 * deb: libxml2-dev (Debian, Ubuntu, etc)
 * rpm: libxml2-devel (Fedora, CentOS, RHEL)
 * csw: libxml2_dev (Solaris)
If libxml-2.0 is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a libxml-2.0.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
--------------------------------------------------------------------
ERROR: configuration failed for package 'xml2'
* removing '/usr/local/lib/R/site-library/xml2'
ERROR: dependency 'openssl' is not available for package 'ids'
* removing '/usr/local/lib/R/site-library/ids'
ERROR: dependency 'systemfonts' is not available for package 'textshaping'
* removing '/usr/local/lib/R/site-library/textshaping'
ERROR: dependencies 'curl', 'openssl' are not available for package 'httr'
* removing '/usr/local/lib/R/site-library/httr'
ERROR: dependencies 'httr', 'openssl' are not available for package 'gargle'
* removing '/usr/local/lib/R/site-library/gargle'
ERROR: dependencies 'systemfonts', 'textshaping' are not available for package 'ragg'
* removing '/usr/local/lib/R/site-library/ragg'
ERROR: dependencies 'httr', 'xml2' are not available for package 'rvest'
* removing '/usr/local/lib/R/site-library/rvest'
ERROR: dependencies 'gargle', 'httr' are not available for package 'googledrive'
* removing '/usr/local/lib/R/site-library/googledrive'
ERROR: dependencies 'curl', 'gargle', 'googledrive', 'httr', 'ids' are not available for package 'googlesheets4'
* removing '/usr/local/lib/R/site-library/googlesheets4'
ERROR: dependencies 'googledrive', 'googlesheets4', 'httr', 'ragg', 'rvest', 'xml2' are not available for package 'tidyverse'
* removing '/usr/local/lib/R/site-library/tidyverse'

The downloaded source packages are in
    '/tmp/RtmpUztchF/downloaded_packages'
There were 13 warnings (use warnings() to see them)

简而言之,您必须安装一些额外的系统库,例如libcurl4-openssl-devlibssl-devlibfontconfig1-devlibxml2-dev

从Ubuntu存储库安装它

apt-get install -y r-cran-tidyverse

对于后一种选择,检查您获得的版本是否是您所追求的版本(如果您关心这些事情)。

root@aee05f0e225e:/app# apt-get install -y r-cran-tidyverse

...

Processing triggers for libc-bin (2.35-0ubuntu3.1) ...
Processing triggers for fontconfig (2.13.1-4.2ubuntu5) ...
root@aee05f0e225e:/app# R

> library(tidyverse)
-- Attaching packages --------------------------------------------------------------------------------------------------------------------------------- tidyverse 1.3.1 --
v ggplot2 3.4.2     v purrr   1.0.1
v tibble  3.2.1     v dplyr   1.1.2
v tidyr   1.3.0     v stringr 1.5.0
v readr   2.1.4     v forcats 1.0.0
-- Conflicts ------------------------------------------------------------------------------------------------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()

相关问题