我正在尝试使用 Dockerfile 安装 R 包。
\n\n我安装了图像Rocker/Rstudio。
\n\nDockerfile的内容是:
\n\n# Base image https://hub.docker.com/r/rocker/rstudio\nFROM rocker/rstudio:latest\n\n## Create directories\nRUN mkdir -p /rstudio\nRUN mkdir -p /rscripts\n\n\n##Install R packages\nRUN R -e "install.packages(c(\'rvest\', \'jsonlite\', \'data.table\' ,\'stringr\'), repos = \'http://cran.us.r-project.org\')"\nRun Code Online (Sandbox Code Playgroud)\n\n然后我构建我的图像执行:docker build -t my_r_image .\n图像构建但软件包未安装,因为我收到此警告:
\n\n\nInstalling packages into \xe2\x80\x98/usr/local/lib/R/site-library\xe2\x80\x99 (as \xe2\x80\x98lib\xe2\x80\x99 is\n unspecified) Warning: unable to access index for repository\n http://cran.us.r-project.org/src/contrib: cannot open URL\n \'http://cran.us.r-project.org/src/contrib/PACKAGES\'
\n
I tried by replacing http://cran.us.r-project.org by = \'http://cran.rstudio.com/\')" but …
每次我重新启动 ec2 服务器时,我都必须执行以下操作:
sudo systemctl start docker然后docker-compose up -d启动所有容器。
有没有办法在实例开始时自动运行这两个命令?我已经阅读了这个答案,我认为理想情况下我想知道如何做到这一点:
创建一个 systemd 服务并启用它。所有启用的系统服务将在通电时启动。
你知道如何创建这样的 systemd 服务吗?
[编辑 1]:按照 Chris William 的评论,这是我所做的:
谢谢 Chris,所以我创建了一个docker_boot.service,内容如下:
[Unit]
Description=docker boot
After=docker.service
[Service]
Type=simple
Restart=always
RestartSec=1
User=ec2-user
ExecStart=/usr/bin/docker-compose -f docker-compose.yml up
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
我在/etc/systemd/system文件夹中创建它
然后我做了:
sudo systemctl enable docker
sudo systemctl enable docker_boot
Run Code Online (Sandbox Code Playgroud)
当我打开服务器时,唯一正在运行的 Docker 图像是certbot/certbot和telethonkids/shinyproxy
请在我的docker-compose.yml文件内容下方找到。
您是否看到缺少什么以便所有图像都启动并运行?
version: "3.5"
services:
rstudio:
environment:
- USER=username
- PASSWORD=password
image: "rocker/tidyverse:latest"
build: …Run Code Online (Sandbox Code Playgroud) amazon-ec2 amazon-web-services systemd docker docker-compose
我正在尝试在 EC2 实例上从 R 安装 readR 包。
我在这篇文章中找到了解决方案:
我想要 CentOS 的脚本,但答案是 Ubuntu:
[1] apt-get update # refresh
[2] apt-get install software-properties-common
[3] add-apt-repository -y "ppa:marutter/rrutter"
[4] add-apt-repository -y "ppa:marutter/c2d4u"
[5] apt-get update # now with new repos
[6] apt-get install r-cran-readr
Run Code Online (Sandbox Code Playgroud)
下面是我的翻译尝试,我知道第 2 行在我的情况下不是必需的,我缺少的是允许在 CentOs 中添加存储库的两行:
sudo yum update
sudo mkdir ppa:marutter/rrutter
sudo mkdir ppa:marutter/c2d4u
sudo yum update
sudo yum install r-cran-readr
Run Code Online (Sandbox Code Playgroud)
非常感谢帮助!
我已经构建了两个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 可用于我的所有图像,我该如何实现?
我正在尝试通过阅读 XPath 代码来抓取网站。当我进入开发人员部分时,我看到这些行:
<span class="js-bestRate-show" data-crid="11232895" data-id="928723" data-abc="0602524361510" data-referecenceta="44205406" data-catalog="1">
Run Code Online (Sandbox Code Playgroud)
我想抓取 data-abc 的所有值。假设网站上的每个元素都是一部电影,所以我想抓取页面上每部电影的所有 data-abc 元素。
我想使用带有 R 的 Rvest 包来做到这一点。下面是两种不同的尝试,但没有成功...
website %>% html_nodes("js-bestRate-show") %>% html_text()
website %>%
html_nodes(xpath = "js-bestRate-show") %>%
html_nodes(xpath = "//div") %>%
html_nodes(xpath = "//span") %>%
html_nodes(xpath = "//data-abc")
Run Code Online (Sandbox Code Playgroud)
有人知道 html_nodes 和 Rvest 是如何工作的吗?
我想将 R 文件的输出传递给 bash 脚本。R 脚本的输出是视频的标题:“视频标题”
我的 bash 脚本很简单:
youtube-dl title_of_video.avi https://www.youtube.com/watch?v=w82a1FTere5o88
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望视频的输出为“视频标题”.avi
我知道我可以使用 Rscript 通过 bash 命令启动 R 脚本,但我不认为 Rscript 可以在这里帮助我。
我正在尝试通过 EC2 实例上的 RStudio 安排 cron 作业。
当我使用具有非常基本功能的基本脚本时,它工作得很好。但是,当我想要安排一个包含特定 R 包中的 R 函数的脚本时,脚本会失败。
我的 cron 看起来像这样:
MAILTO="myemail@adress.com"
36 * * * * /home/user1/Test_for_Cron.R
Run Code Online (Sandbox Code Playgroud)
脚本启动后,我收到一封来自 Cron Daemon 的电子邮件,其中指定了以下内容:
R_function中的错误:找不到函数R_function
执行已停止
根据我的发现,我似乎必须指定我想要在 RStudio 中运行脚本或者我想要“获取”它。
我感觉答案可能就在下面这 3 篇文章的组合中,但在测试了一些建议后我没有找到解决方案:
检查 R 是否正在 RStudio
Cron 作业中运行,以查找 R 脚本失败的
R 命令,用于将工作目录设置为 Rstudio 中的源文件位置
非常感谢帮助!