我正在学习如何使用shinyproxy来部署R shiny应用程序,但我不知道在哪里放置包含用于访问数据库的全局变量的.Renviron
文件。
Docker镜像构建没有任何错误,但当我使用以下命令启动容器时:
docker run -it -p 3838:3838 shinyproxy-template .
它没有在.Renviron
文件中找到env变量,我最终在需要全局变量的R代码部分得到一个错误。
我当前的文件夹结构如下:
shinyproxy-template/
|- app-folder/
|- .gitignore
|- Dockerfile
|- README.md
|- app.Rproj
|- Rprofile.site
|- .Renviron
我尝试将.Renviron
文件放入app-folder/
中,然后再次构建docker镜像,但全局变量仍然无法访问。
我应该将.Renviron
放在哪里,以便应用程序访问全局变量?
2条答案
按热度按时间xam8gpfp1#
有多种选择:
将
.Renviron
文件放到容器内的预期位置您可以将
COPY
命令添加到Dockerfile
,以将.Renviron
文件复制到预期位置-即用户的主目录或WORKDIR
位置(如果在Dockerfile中定义)。如果是root用户,则为:将
.Renviron
中的环境变量添加到Dockerfile中添加如下行:
到您的
Dockerfile
在shinyproxy配置中添加
.Renviron
的环境变量您可以在
application.yaml
配置文件中定义环境变量,方法是使用或
了解您的应用规范。请注意,此处的路径位于主机上,而不是容器内。
对于
docker run
当你在shinyproxy之外执行
docker run
时,你可以使用参数--env-file
,如下所示:相关文档链接:
ryoqjall2#
经过反复试验,我终于找到了一个解决办法。
首先,在shinyproxy外部启动容器,检查shinyproxy应用是否正常运行?使用docker的
--env-file
标志指定.Renviron
文件路径。在我的情况下,因为Dockerfile
和.Renviron
都在同一个文件夹中,所以我会这样做:应用程序现在将识别
.Renviron
文件中定义的env变量,并且没有错误!然后,我切换到
shinyproxy-2.6.1.jar
文件所在的目录,并使用java -jar shinyproxy-2.6.1.jar
再次运行它。当我试图启动我的shinyapp时出现了一个错误。它找不到环境变量。所以我直接将它们添加到与
shinyproxy-2.6.1.jar
相同的位置的application.yml
中:根据您的情况,将yml部分的必要部分替换为您这边的相应部分。这同样适用于环境变量。
事实上,让我只提供我的整个
application.yml
文件的原型,看看我添加的最后一个应用程序“wca”:显然有一个更好的解决方案直接引用
.Renviron
文件,但由于我不能弄清楚,这将可以。