ML_*_*ast 5 r package docker install.packages dockerfile
我已经构建了两个Docker 镜像,一个是我的rstudio镜像,另一个是运行我的 cronjobs(R 脚本)的cron镜像。
我正在构建其他图像(Shiny 等),它们需要与 cron 图像和 rstudio 图像完全相同的 R 包。
所以我想要一个文件,我可以在其中列出不同图像所需的所有 R 包。我的文件夹的结构如下:
??? cron
? ??? crontab
? ??? Dockerfile
??? rstudio
? ??? Dockerfile
??? r_packages.txt
Run Code Online (Sandbox Code Playgroud)
例如,对于我的rstudio映像的Dockerfile,我尝试了以下操作:
FROM rocker/tidyverse:3.6.1
## Create directories
RUN mkdir -p /rstudio
RUN mkdir -p /rscripts
RUN cat /home/ec2-user/r_packages.txt
Run Code Online (Sandbox Code Playgroud)
r_packages.txt的内容如下:
R -e "install.packages(c('writexl','readxl','rjson','httr','rvest','DBI','RPostgres','stringr','xlsx','knitr','kableExtra','devtools','RSelenium'))"
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
cat: /home/ec2-user/r_packages.txt: 没有那个文件或目录
因为我认为r_packages.txt应该与我的rstudio Dockerfile位于同一目录中,但我希望我的 r_packages 可用于我的所有图像,我该如何实现?
您需要从项目目录运行构建命令,而不是 Dockerfile 所在的目录。原因是 Docker 使用了上下文的概念,类似于工作目录。Docker 构建器无法访问上下文目录之外(上方)的文件,但它可以向下查看子目录。当您使用 Dockerfile 更改目录的上下文时,您必须指定要使用的 Dockerfile。例如,要构建 cron 映像,您必须运行:
docker build -t cron_image_tag -f cron/Dockerfile /directory/with/r_packages.txt
要修复该cat: /home/ec2-user/r_packages.txt: No such file or directory错误,您还必须做一件事。当您使用 时RUN,您可以在构建容器内运行该命令。除非您显式添加该文件,否则容器不会包含r_packages.txt该文件。将您的 Dockerfile 更改为此以解决此问题:
FROM rocker/tidyverse:3.6.1
COPY r_packages.txt /r_packages.txt
RUN cat /r_packages.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |