小编Mic*_*zes的帖子

在容器中生成闪亮的进程时保留环境变量

我有一个正在运行的Docker容器,带有略微修改过的rocker/shiny图像中的闪亮服务器.

默认shiny-server.conf文件将闪亮用户设置为下面的用户

# Define the user we should use when spawning R Shiny processes
run_as shiny;
Run Code Online (Sandbox Code Playgroud)

表示服务器默认以root身份运行,但闪亮应用程序的工作进程以用户闪亮的方式运行

应用程序本身使用与SQL Server的数据仓库连接,通过RODBC初始化.虽然我们不想将整个连接详细信息字符串(包括数据库主机和密码)放入代码库中,但我们希望通过运行以下例程从创建容器的环境变量中读取它们

HOST <- Sys.getenv("host")
DB <- Sys.getenv("db")
UID <- Sys.getenv("uid")
PWD <- Sys.getenv("pwd")

conn<-paste0("driver={ODBC Driver 17 for SQL Server};server=",HOST,";database=",DB,";uid=",UID,";pwd=",PWD)
dbhandle<-odbcDriverConnect(conn)
Run Code Online (Sandbox Code Playgroud)

问题是,当用户闪亮时,在容器内生成工作进程时,这些env变量为空.

如果我尝试在交互式R控制台中运行相同的代码(作为root用户或闪亮用户),我会按预期获得env变量.

任何输入都将非常感激.请注意我不打算使用docker机密,因为我没有在docker swarm集群中运行应用程序,只是一个独立的Rancher OS主机.

编辑:虽然.Renviron文件可能是解决该特定问题的可行替代方案,但它需要将变量放入代码库中,我们在此尝试避免这种情况.

r environment-variables shiny docker shiny-server

6
推荐指数
1
解决办法
526
查看次数

标签 统计

docker ×1

environment-variables ×1

r ×1

shiny ×1

shiny-server ×1