httr 调用中出现未定义错误。 httr 输出:0 毫秒后无法连接到本地主机端口 4445:连接被拒绝

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

我通过 docker 运行闪亮的应用程序。但它可以在 RStudio 上运行,但是当我通过 docker 运行它时,它会出现错误:

Undefined error in httr call. httr output: Failed to connect to localhost port 4445 after 0 ms: Connection refused

闪亮代码:

# app.R
library(shiny)
library(RSelenium)

ui <- fluidPage(
  actionButton("btn", "Click Me"),
  textOutput("result")
)

server <- function(input, output, session) {
  # Start the remote driver
  remDr <- remoteDriver(
    remoteServerAddr = "localhost",  # Docker container host
    port = 4445L,  # Docker container port
    browserName = "chrome",
  )
  observeEvent(input$btn, {
      output$result <- renderText({
        remDr$open()
  
        # Navigate to a website (e.g., Google)
        remDr$navigate("https://www.google.com")
        remDr$maxWindowSize()
  
        # Perform some actions (e.g., print page title)
        title <- remDr$getTitle()
        
        return(as.character(title))
      })
      
})
  session$onSessionEnded(function() {
    # Close the remote driver
    remDr$close()
  })
}

shinyApp(ui, server)

Dockerfile:

FROM rocker/shiny:4

# Install R packages required 
# Change the packages list to suit your needs
RUN R -e "install.packages(c('shiny', 'RSelenium', 'httr'), dependencies=TRUE)"

# Copy the Shiny app files into the image
COPY app.R /srv/shiny-server/

# Expose port 3838 for Shiny app
EXPOSE 3838

# Run Shiny app on container start
CMD ["R", "-e", "shiny::runApp('/srv/shiny-server/app.R', host = '0.0.0.0', port = 3838)"]

执行的Docker命令:

docker pull selenium/standalone-chrome:4.2.2
docker run -d -p 4445:4444 --shm-size 4g selenium/standalone-chrome:4.2.2
docker build -t shiny-rselenium .
docker run -p 3838:3838 shiny-rselenium

RStudio 上一切都运行良好。但是当我访问 localhost:3838 时,我遇到了这个错误。 如何解决这个问题?

r docker shiny rselenium docker-selenium
1个回答
0
投票

在容器上下文中,

localhost
解析为容器实例本身,而不是主机系统。如果您使用的是 Docker Dektop 并且想要通过已发布的端口,您可以尝试将
localhost
替换为
host.docker.internal
,即 :

remDr <- remoteDriver(
    remoteServerAddr = "host.docker.internal",  # Docker container host
    port = 4445L,  # Docker container port
    browserName = "chrome",
  )

虽然我更愿意使用 Docker Compose 并让它处理网络。 首先更新

remoteDriver()
调用,以便可以通过环境变量进行配置:

  remDr <- remoteDriver(
    remoteServerAddr = Sys.getenv("SELENIUM_HOST", "localhost"),
    port =  as.integer(Sys.getenv("SELENIUM_PORT", "4445")), 
    browserName = "chrome",
  )

comopse.yaml

services:
  shiny-rselenium:
    build: .
    ports:
      - "3838:3838"
    environment:
      - SELENIUM_HOST=selenium
      - SELENIUM_PORT=4444
    depends_on:
      - selenium
  selenium:
    image: "selenium/standalone-chrome:4.2.2"
    shm_size: 4g

开始:

PS > docker compose up -d
[+] Building 0.0s (0/0)                                                                                                                                                                      docker:default
[+] Running 3/3
 ✔ Network shinydkr_default              Created                                                                                                                                                       0.1s
 ✔ Container shinydkr-selenium-1         Started                                                                                                                                                       0.1s
 ✔ Container shinydkr-shiny-rselenium-1  Started                                                                                                                                                       0.1s

检查:

PS > docker compose ps
NAME                         IMAGE                              COMMAND                  SERVICE           CREATED          STATUS          PORTS
shinydkr-selenium-1          selenium/standalone-chrome:4.2.2   "/opt/bin/entry_poin…"   selenium          23 seconds ago   Up 22 seconds   4444/tcp, 5900/tcp
shinydkr-shiny-rselenium-1   shinydkr-shiny-rselenium           "R -e 'shiny::runApp…"   shiny-rselenium   23 seconds ago   Up 22 seconds   0.0.0.0:3838->3838/tcp

停止并删除容器和网络:

PS > docker compose down
[+] Running 3/3
 ✔ Container shinydkr-shiny-rselenium-1  Removed                                                                                                                                                      10.4s
 ✔ Container shinydkr-selenium-1         Removed                                                                                                                                                       4.3s
 ✔ Network shinydkr_default              Removed

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