我正在学习如何使用光代理部署R闪亮的应用程序,但我不知道将.Renviron文件放在哪里,该文件包含用于访问数据库的全局变量。
码头映像生成时没有任何错误,但当我使用以下方法启动容器时:
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/中,然后再次构建码头映像,但仍然无法访问全局变量。
我应该把.Renviron放在哪里,这样应用程序才能访问全局变量?
发布于 2022-06-23 14:09:53
有多种选择:
将.Renviron文件放置到容器内的预期位置
您可以向COPY添加一个Dockefile命令,以便将.Renviron文件复制到预期的位置--即用户的主目录或在Dockerfile中定义的WORKDIR位置。如果是根用户,则如下所示:
COPY .Renviron /root/将环境变量从.Renviron添加到Dockerfile中
添加如下行:
ENV VAR1="value1"
ENV VAR2="value2"给你的Dockerfile
将环境变量从.Renviron添加到shinyproxy配置中
可以在application.yaml配置文件中定义环境变量,方法是使用
container-env:
VAR1: VALUE1
VAR2: VALUE2或
container-env-file: /path/to/.Renviron你的应用程序规范。请注意,这里的路径位于主机上,而不是容器内。
对于docker run
在shinyproxy之外执行docker run时,可以使用参数--env-file,如下所示:
docker run -it -p 3838:3838 shinyproxy-template --env-file /path/to/shinyproxy-template/.RenvironReleant文档链接:
发布于 2022-06-23 14:11:04
编辑:看一下@Max的解决方案。我们几乎同时发了信,但他的指示比较清楚。
经过多次反复试验,我终于找到了解决办法。
首先,启动shiny外部的容器以检查这个闪亮的应用程序是否正常运行?使用docker的--env-file标志指定.Renviron文件路径。在我的例子中,由于Dockerfile和.Renviron都位于同一个文件夹中,所以我会这样做:
docker run -it --env-file .Renviron -p 3838:3838 shinyproxy-template .该应用程序现在将识别在.Renviron文件中定义的errors,没有错误!
然后,我更改为拥有shinyproxy-2.6.1.jar文件的目录,并使用java -jar shinyproxy-2.6.1.jar再次运行它。当我试图启动我的shinyapp时出现了一个错误。它找不到敌人。
因此,我直接将它们添加到application.yml中,它与shinyproxy-2.6.1.jar位于同一个位置。
- id: app-folder
display-name: My App
description: My App's title
container-cmd: ["R", "-e", "shiny::runApp('/root/app-folder')"]
container-image: openanalytics/shinyproxy-template
container-env:
ENV1: ENV1-VALUE
ENV2: ENV2-VALUE
ENV3: ENV3-VALUE
access-groups: scientists根据您的情况,将yml部分的必要部分替换为相应的部分。同样的情况也适用于env。
事实上,让我提供我整个application.yml文件的原型,看看我添加“wca”的最后一个应用程序:
proxy:
title: Open Analytics Shiny Proxy
logo-url: https://www.openanalytics.eu/shinyproxy/logo.png
landing-page: /
# hide nav bar:
hide-navbar: true
heartbeat-rate: 10000
heartbeat-timeout: 60000
port: 8080
authentication: ldap
admin-groups: scientists
# Example: 'simple' authentication configuration
users:
- name: jack
password: password
groups: scientists
- name: jeff
password: password
groups: mathematicians
# Example: 'ldap' authentication configuration
ldap:
url: ldap://ldap.forumsys.com:389/dc=example,dc=com
user-dn-pattern: uid={0}
group-search-base:
group-search-filter: (uniqueMember={0})
manager-dn: cn=read-only-admin,dc=example,dc=com
manager-password: password
# Docker configuration
docker:
url: http://localhost:2375
port-range-start: 20000
specs:
- id: 01_hello
display-name: Hello Application
description: Application which demonstrates the basics of a Shiny app
container-cmd: ["R", "-e", "shinyproxy::run_01_hello()"]
container-image: openanalytics/shinyproxy-demo
access-groups: [scientists, mathematicians]
- id: 06_tabsets
container-cmd: ["R", "-e", "shinyproxy::run_06_tabsets()"]
container-image: openanalytics/shinyproxy-demo
access-groups: scientists
- id: euler
display-name: Euler's number
description: Adding another app to shinyproxy
container-cmd: ["R", "-e", "shiny::runApp('/root/euler')"]
container-image: openanalytics/shinyproxy-template
access-groups: scientists
- id: wca
display-name: Wasanii
description: WhatsApp Chat Analysis
container-cmd: ["R", "-e", "shiny::runApp('/root/wca')"]
container-image: wca
container-env:
FIREBASE_API_KEY: myfirebaseapikey
FIREBASE_PROJECT_ID: myfirebaseprojectid
FIREBASE_AUTH_DOMAIN: myfirebaseauthdomain
FIREBASE_STORAGE_BUCKET: myfirebasestoragebucket
FIREBASE_APP_ID: myfirebaseappid
FIREBASE_DATABASE_URL: myfirebasedatabaseurl
access-groups: scientists
logging:
file:
shinyproxy.log显然,有一个更好的解决方案可以直接引用.Renviron文件,但是由于我无法解决这个问题,就可以了。
https://stackoverflow.com/questions/72726483
复制相似问题