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

Preserve environment variables when spawning shiny processes within a container

我有一个 运行ning Docker 容器,其中包含来自稍微修改过的 rocker/shiny 映像的闪亮服务器。

默认 shiny-server.conf 文件将 shiny 用户设置为

下的用户
# Define the user we should use when spawning R Shiny processes
run_as shiny;

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

应用程序本身使用数据仓库连接到 SQL 服务器,通过 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)

问题是,当工作进程作为用户 shiny 在容器中生成时,这些环境变量为空。

如果我尝试 运行 交互式 R 控制台中的相同代码(作为 rootshiny 用户) 我得到了预期的环境变量。

如有任何意见,我们将不胜感激。请注意,我不打算使用 docker 秘密,因为我不是 运行 在 docker swarm 集群中安装应用程序,只是一个独立的 Rancher OS 主机。

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

我在 shiny-server.sh 启动脚本中添加了以下内容,这是 docker 容器的 CMD,正如 Ralf Stubner

所建议的
env > /home/shiny/.Renviron
chown shiny.shiny /home/shiny/.Renviron