Docker R Shiny应用0.0.0.0在尝试在本地浏览器中查看时拒绝连接



阅读:

  • Docker拒绝连接

在创建新的闪亮web应用程序时,我使用rstudio模板app.r创建了一个简单的闪亮应用程序。

我的目录:

doug:~/Projects/test$ pwd
/home/work/Projects/test
doug:~/Projects/test$ ls -l
total 20
-rw-r--r-- 1 work work  178 Sep 24 18:27 docker-compose.yml
-rw-r--r-- 1 work work  240 Sep 24 18:16 Dockerfile
drwxr-xr-x 2 work work 4096 Sep 24 13:55 test_app
-rw-r--r-- 1 work work  205 Sep 24 13:45 test.Rproj

我的Docker文件:

FROM rocker/shiny-verse
COPY test_app mountpoints/apps/test_app
RUN apt-get update 
&& apt-get upgrade -y

WORKDIR mountpoints/apps/test_app
EXPOSE 3838
CMD R --no-save -e 'shiny::runApp("app.R", port = 3838, host = "0.0.0.0")'

我的docker撰写文件:

version: '3.2'
services:
test:
build:
context: .
dockerfile: Dockerfile
restart: always
image: test:latest
ports:
- '80:3838'
user: 'root'

我构建了图像:

doug:~/Projects/test$ docker build -t test .
Sending build context to Docker daemon  34.82kB
Step 1/6 : FROM rocker/shiny-verse
---> 6ca67ad3f372
Step 2/6 : COPY test_app mountpoints/apps/test_app
---> Using cache
---> 7d34eee9154b
Step 3/6 : RUN apt-get update     && apt-get upgrade -y
---> Using cache
---> 6a9f0856291a
Step 4/6 : WORKDIR mountpoints/apps/test_app
---> Using cache
---> 30897306d02b
Step 5/6 : EXPOSE 3838
---> Using cache
---> 0affe5f79ba4
Step 6/6 : CMD R --no-save -e 'shiny::runApp("app.R", port = 3838, host = "0.0.0.0")'
---> Using cache
---> 1ce09f39c2ce
Successfully built 1ce09f39c2ce
Successfully tagged test:latest

然后我试着用docker compose:运行

doug:~/Projects/test$ docker-compose run test
R version 4.0.2 (2020-06-22) -- "Taking Off Again"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> shiny::runApp("app.R", port = 3838, host = "0.0.0.0")
Loading required package: shiny
Listening on http://0.0.0.0:3838

现在,当我尝试访问应用程序时http://0.0.0.0:3838在我的浏览器中,我得到:

无法访问此网站0.0.0.0拒绝连接。

我尝试了一些变体:127.0.0.1:3838本地主机:3838127.0.0.1:3388/test_applocalhost:33838/test_app

在所有情况下,我都看到了相同的消息,无法在浏览器中查看我的应用程序。

我试着用上面docker组合文件的端口部分进行实验:

端口:

  • '80:3838'

已尝试:

'3838:3838', '127.0.0.1:3838', '3838'

在每种情况下,我都重建了图像并重试,但仍然无法在浏览器中查看我的应用程序。

如何运行我的Shiny应用程序并在浏览器中查看它?

虽然我知道您打算使用docker-compose,但我确保基本网络正常工作的第一步。我能够连接到:

docker run -it --rm -p 3838:3838 test

然后我尝试了基本的docker,我能够让它在中工作

docker-compose run -p 3838:3838 test

(同样,需要-p 3838:3838…(

由此看来,docker-compose实际上是要从up开始的。当我而不是(在停止上述容器后(运行时,我也能够看到闪亮的应用程序

docker-compose up -d test

因此runup之间存在差异。阅读https://docs.docker.com/compose/reference/run/,我发现了这个:

run使用的命令在新容器中启动,该容器的配置由服务的配置定义,包括卷、链接和其他详细信息。然而,有两个重要的区别。

首先,run传递的命令将覆盖服务配置中定义的命令。例如,如果web服务配置是用bash启动的,则docker-compose run web python app.py会用python app.py覆盖它。

第二个区别是docker-compose run命令不创建服务配置中指定的任何端口。这样可以防止与已打开的端口发生端口冲突。如果确实希望创建服务的端口并将其映射到主机,请指定--service-ports标志。。。

(强调矿(

这让我尝试(并成功(:

docker-compose run --service-ports test

所有这些,http://localhost:3838都有效(对我来说,在windows上……应该也适用于其他人,但如果不是localhost,那就试试127.0.0.1(。


我的文件,为了测试速度略有修改,因为我没有你的test_app:

Dockerfile

FROM rocker/shiny-verse
EXPOSE 3838
CMD R --no-save -e 'library(shiny); runExample("01_hello", port=3838, host="0.0.0.0");'

docker-compose.yml

version: '3.2'
services:
test:
build:
context: .
dockerfile: Dockerfile
restart: always
image: test:latest
ports:
- "3838:3838"
user: 'root'

最新更新