首页 > 解决方案 > 运行 R 的 Docker 容器中的“文件 '.Renviron' 无法打开读取”

问题描述

我目前正在尝试对我编写的 RShiny 应用程序进行 docker 化,并且在我的脚本开头读取 .Renviron 变量时遇到问题。下面是我的控制台输出。

❯ docker run --rm -p 6969:6969 r-app

Attaching package: ‘lubridate’

The following objects are masked from ‘package:base’:

    date, intersect, setdiff, union

── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
✔ ggplot2 3.3.3     ✔ purrr   0.3.4
✔ tibble  3.0.6     ✔ dplyr   1.0.4
✔ tidyr   1.1.2     ✔ forcats 0.5.1
✔ readr   1.4.0
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ lubridate::as.difftime() masks base::as.difftime()
✖ readr::col_factor()      masks scales::col_factor()
✖ lubridate::date()        masks base::date()
✖ purrr::discard()         masks scales::discard()
✖ dplyr::filter()          masks stats::filter()
✖ lubridate::intersect()   masks base::intersect()
✖ dplyr::lag()             masks stats::lag()
✖ lubridate::setdiff()     masks base::setdiff()
✖ lubridate::union()       masks base::union()
Warning message:
In readRenviron(".Renviron") :
  file '.Renviron' cannot be opened for reading
Error: Failed to connect: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Execution halted

下面是我的 Dockerfile。.Renviron 文件与我的 app.R 文件存在于同一文件夹中,所以我不确定为什么它无法打开它。

FROM rocker/verse:latest

# Install Ubuntu packages
RUN apt-get update && apt-get install -y \
    sudo \
    gdebi-core \
    pandoc \
    pandoc-citeproc \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    libssl-dev

# Download and install ShinyServer
RUN wget --no-verbose --no-check-certificate https://download3.rstudio.org/ubuntu-14.04/x86_64/shiny-server-1.5.7.907-amd64.deb && \
    gdebi shiny-server-1.5.7.907-amd64.deb

RUN R -e "install.packages('lubridate', repos='http://cran.rstudio.com/')"
RUN R -e "install.packages('RMariaDB', repos='http://cran.rstudio.com/')"
RUN R -e "install.packages('scales', repos='http://cran.rstudio.com/')"
RUN R -e "install.packages('shiny', repos='http://cran.rstudio.com/')"
RUN R -e "install.packages('stringr', repos='http://cran.rstudio.com/')"
RUN R -e "install.packages('tidyverse', repos='http://cran.rstudio.com/')"

# Copy configuration files into the Docker image
#COPY shiny-server.sh /usr/bin/shiny-server.sh
#COPY ttp-internal-reporting.Rproj /srv/shiny-server/
#COPY app.R /srv/shiny-server/
#COPY .Renviron /srv/shiny-server/
COPY . /srv/shiny-server/

# select port
EXPOSE 6969

CMD ["Rscript", "srv/shiny-server/app.R"]

互联网上确实没有很多文档或示例可用于读取 .Renviron 文件以用于 dockerized 应用程序,我不想避免使用此文件,因为它包含用于获取我们数据的数据库凭据。任何帮助是极大的赞赏。

标签: rdockershiny

解决方案


FROM rocker/r-ubuntu:20.04

RUN apt-get update && apt-get upgrade -y && apt-get clean

RUN apt-get install -y \
            libssl-dev \
            libcurl4-openssl-dev \
            && apt-get clean

RUN R -e 'install.packages("curl")'

RUN R -e 'install.packages("usethis")'

COPY .Renviron /root/.Renviron

使用这个图像和这个 Dockerfile,在 COPY 之后的下一层,当运行 R 命令时,它会识别 .Renviron 中设置的变量

例如,如果我在 .Renviron 中插入了 GITHUB_PAT,那么在接下来的层中,我可以从我的 github 安装我自己的私有包


推荐阅读