【问题标题】:RSelenium and Docker on EC2EC2 上的 RSelenium 和 Docker
【发布时间】:2018-12-24 18:15:16
【问题描述】:

我的最终目标是能够使用 我的 EC2 实例 (AWS)。

为此,我读到建议在虚拟机上使用和安装 docker。所以我按照约翰·D·哈里森在这里给出的所有步骤: https://rpubs.com/johndharrison/RSelenium-Docker

除了最后我在我的EC2 实例上输入RStudio 之外,一切都很顺利。 因为当我尝试连接到远程服务器时,出现以下错误:

library(RSelenium) remDr <- remoteDriver(remoteServerAddr = "192.168.99.100", port = 4445L) remDr$open()

1 "连接到远程服务器" checkError(res) 中的错误: httr 调用中的未定义错误。 httr 输出:已达到超时: 10001 毫秒后连接超时

我按照教程中给出的确切步骤进行操作,所以我真的不知道出了什么问题。

非常感谢任何帮助!

M.

编辑1: 请在下面找到我到目前为止的截图:

我使用的 EC2 实例如下:

【问题讨论】:

  • 你在虚拟机上打开了4445端口吗?您是否还启动了 Docker 容器以公开此端口?
  • 是的,我做了,我会编辑我的帖子以提供更多详细信息。
  • 运行docker容器的机器的IP地址是什么?
  • 我编辑了我的帖子:docker机器ip是192.168.99.100
  • 我成功了。我会将步骤放在答案中。

标签: rselenium rstudio r docker amazon-ec2 rselenium


【解决方案1】:

以下对我有用。

创建一个安装了 Docker 的 EC2 Ubuntu 实例。我没有使用 Windows。

如下在EC2实例上运行selenium docker镜像

docker run -d -p 4445:4444 selenium/standalone-firefox:2.53.0 

通过在安全组中创建适当的条目,确保从运行 R 的 IP 地址打开端口 4445。

在我可以看到 EC2 实例的台式机上,使用此 R 代码连接...

library(RSelenium)
remDr <- remoteDriver(remoteServerAddr = "ec2-xxx.eu-west-1.compute.amazonaws.com", port = 4445L)
remDr$open()

#[1] "Connecting to remote server"
#$applicationCacheEnabled
#[1] TRUE

#$rotatable
#[1] FALSE

#$handlesAlerts
#[1] TRUE
#...

注意 EC2 实例的地址是“ec2...”。此地址可从 AWS 控制台获得,并且是实例的公有 DNS 名称。如果您碰巧在另一台 AWS 机器上运行 R,那么您可能需要使用私有 DNS 地址。

[编辑添加了在云中运行 Rstudio 的说明]

查找 Selenium 容器的 IP 地址。一种方法是按如下方式登录

docker exec -it <nameofthecontainer> bash
hostname -i
exit

要在与 Selenium 相同的 EC2 机器上运行 Rstudio,一种选择是使用 Docker。一个好的图像是rocker/rstudio

执行以下操作。

docker run -d -p 8787:8787 -e PASSWORD=<password> --name rstudio rocker/rstudio

确保端口 8787 对您开放,您可以从该端口访问 Rstudio。在实例的安全组中添加条目以执行此操作。

要在 Rstudio docker 容器中安装 RSelenium,请执行以下操作。

docker exec rstudio bash
apt-get update
apt-get install -y libxml2-dev
exit

找到 Rstudio GUI 的 URL - 它会是这样的

http://ec2-xxx:8787 

用户名是rstudio,密码是你启动容器时指定的密码。

从 Rstudio 安装 RSelenium 包。

install.packages("RSelenium")

最后运行 R 代码来访问 Selenium 实例。

library(RSelenium)
remDr <- remoteDriver(remoteServerAddr = "IP address of the Selenium container", port = 4445L)
remDr$open()

【讨论】:

  • 我用我的 EC2 的 DNS 公共修改了 remoteServerAddr,但我仍然收到那个 httr 调用错误。你说:“创建一个安装了 Docker 的 EC2 Ubuntu 实例。我没有使用 Windows。” ==> 我编辑了我的帖子,向您展示了我正在使用的实例,它是 Linux 而不是 Windows,我应该切换到第四个 Ubuntu 吗?这意味着我需要在该新实例上安装 RStudio,如果需要我会这样做。
  • 新信息:您在同一个 EC2 实例上拥有 Docker 和 Rstudio。我可以建议你在台式机上运行 Rstudio 看看是否可以重新创建我所做的吗?
  • 我更新了使用 docker Rstudio 在同一台机器上运行所有内容的说明。它对我有用。
  • docker exec rstudio bash 可能需要为docker exec -i -t rstudio /bin/bash
【解决方案2】:

感谢@awchisholm!正如您所解释的,我需要在我的 EC2 实例上而不是在我的本地机器上安装 docker。问题解决了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-06
    • 2017-09-30
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多