为旧版本的 R 构建 docker 镜像以利用旧包

问题描述 投票:0回答:1

我正在尝试使用 R 2.5.0(我知道这很旧)和 affyPara 包(也很旧)构建一个 docker 映像。 Bioconductor 版本 2.7 应支持 affyPara,该版本应在 Ubuntu 16.04 上运行。因此,我一直在研究这个 dockerfile:

FROM ubuntu:16.04
ENV TZ UTC

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone \
    && sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list \
    && apt-get update -qq \
    && apt-get build-dep r-base-dev -y \
    && apt-get install wget locales -y

RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
    && locale-gen en_US.utf8 \
    && /usr/sbin/update-locale LANG=en_US.UTF-8

ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8

RUN wget https://cran.r-project.org/src/base/R-2/R-2.5.0.tar.gz \
    && tar -xf R-2.5.0.tar.gz \
    && cd R-2.5.0 \
    && ./configure --without-x ; make \
    && make install

# Install Bioconductor version 2.7
RUN R -e 'install.packages("BiocManager", repos="https://cran.r-project.org")'
RUN R -e 'BiocManager::install(version = "2.7")'

# Install affyPara from Bioconductor version 2.7
RUN R -e 'BiocManager::install("affyPara", version = "2.7")'

CMD ["R"]

当我尝试使用以下命令构建此映像(在 docker 文件的目录中)时:

sudo docker buildx build -t affypara -f affyPara.dockerfile .

我收到此错误:

[+] Building 61.1s (5/10)                                                                                                                                                                                                    docker:default
 => [internal] load .dockerignore                                                                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                                                                        0.0s
 => [internal] load build definition from affyPara.dockerfile                                                                                                                                                                          0.0s
 => => transferring dockerfile: 1.01kB                                                                                                                                                                                                 0.0s
 => [internal] load metadata for docker.io/library/ubuntu:16.04                                                                                                                                                                        0.4s
 => CACHED [1/7] FROM docker.io/library/ubuntu:16.04@sha256:1f1a2d56de1d604801a9671f301190704c25d604a416f59e03c04f5c6ffee0d6                                                                                                           0.0s
 => ERROR [2/7] RUN ln -snf /usr/share/zoneinfo/UTC /etc/localtime     && echo UTC > /etc/timezone     && sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list     && apt-get update -qq     && apt-get build-dep r-base-dev -y    60.5s
------
 > [2/7] RUN ln -snf /usr/share/zoneinfo/UTC /etc/localtime     && echo UTC > /etc/timezone     && sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list     && apt-get update -qq     && apt-get build-dep r-base-dev -y     && apt-get install wget locales -y:
60.43 W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial/InRelease  Temporary failure resolving 'archive.ubuntu.com'
60.43 W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease  Temporary failure resolving 'archive.ubuntu.com'
60.43 W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-backports/InRelease  Temporary failure resolving 'archive.ubuntu.com'
60.43 W: Failed to fetch http://archive.canonical.com/ubuntu/dists/xenial/InRelease  Temporary failure resolving 'archive.canonical.com'
60.43 W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/xenial-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
60.43 W: Some index files failed to download. They have been ignored, or old ones used instead.
60.44 Reading package lists...
60.45 E: You must put some 'source' URIs in your sources.list
------
affyPara.dockerfile:4
--------------------
   3 |
   4 | >>> RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
   5 | >>>     && echo $TZ > /etc/timezone \
   6 | >>>     && sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list \
   7 | >>>     && apt-get update -qq \
   8 | >>>     && apt-get build-dep r-base-dev -y \
   9 | >>>     && apt-get install wget locales -y
  10 |
--------------------
ERROR: failed to solve: process "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime     && echo $TZ > /etc/timezone     && sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list     && apt-get update -qq     && apt-get build-dep r-base-dev -y     && apt-get install wget locales -y" did not complete successfully: exit code: 100

不应该通过sed命令将源添加到sources.list中吗?主机可以访问互联网,所以我确信这不是问题。我应该注意我要离开这篇博文:https://chainsawriot.com/postmannheim/2023/01/30/oldestr.html.

我非常感谢有关此问题的任何帮助。我的实验室需要在项目中使用 affyPara,不幸的是它不适用于现代版本的 R 或 BioConductor。

r docker ubuntu dockerfile bioconductor
1个回答
0
投票

显示的错误表明 Docker 构建过程中存在网络问题。它显示“Temporary failure resolving 'archive.ubuntu.com”,这表明 Docker 在解析该 URI 的 DNS 时遇到问题。

以下是解决此问题的几个步骤:

  1. 如果您在 VPN 或代理后面工作,请尝试暂时禁用它并重建 Docker 映像,它可能会影响 DNS 解析。

  2. 或者,您可以直接在 Docker 守护程序设置中添加 DNS 服务器(例如 Google 的

    8.8.8.8
    )。如果您使用的是 Unix 系统,则可以将此行添加到您的
    /etc/docker/daemon.json
    文件中,如果不存在则创建它:

    { “DNS”:[“8.8.8.8”] }

然后,重新启动 Docker 守护进程:

sudo service docker restart

但是,如果所有网络问题都已解决但仍然失败,我们可以尝试使用 Rocker 旧映像安装 R 2.5.1 和 Bioconductor 2.7 版的不同方法。

首先,尝试用

rocker/r-ubuntu:16.04
替换基础图像,使用
FROM rocker/r-ubuntu:16.04
。这是一个已安装 r-base 和 r-base-devel 的 Ubuntu 16.04 映像。您可以在here验证包含的软件包,并相应地修改您的Dockerfile。

然后,使用旧方法(而不是 BiocManager)手动安装 Bioconductor 2.7 版和 affyPara:

# Install Bioconductor version 2.7
RUN R -e 'source("https://bioconductor.org/biocLite.R"); biocLite()'

# Install affyPara from Bioconductor version 2.7
RUN R -e 'source("https://bioconductor.org/biocLite.R"); biocLite("affyPara")'

请记住,这些只是尝试的建议。由于软件依赖项和其他因素随着时间的推移而发生变化,为旧软件版本构建 Docker 映像可能具有挑战性。

© www.soinside.com 2019 - 2024. All rights reserved.