Shiny Server Pro的Docker化并将环境变量传递给它

qvk1mo1f  于 2023-11-14  发布在  Docker
关注(0)|答案(3)|浏览(162)

**问题:**我用Shiny server pro和docker容器化了一个shiny应用,类似这里:https://support.rstudio.com/hc/en-us/articles/360009986893-Shiny-Server-Pro-with-Docker
**问题:**如何在运行时将环境变量传递给docker容器,以便这些环境变量可以在应用中使用(下面的示例应用)。

使用的docker命令是:docker run -it --rm -p 3838:3838 -e env_variable_interest=testname <shiny_image>,即变量env_variable_interest未在Shiny服务器中显示/识别/传输。
非常感谢您的评论!

library(shiny)

ui <- fluidPage(

    # Application title
    titlePanel("Old Faithful Geyser Data"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                        "Number of bins:",
                        min = 1,
                        max = 50,
                        value = 30)
        ),

        # Show a plot of the generated distribution
        mainPanel(
           plotOutput("distPlot")
        ))
)

server <- function(input, output) {

    output$distPlot <- renderPlot({
        # generate bins based on input$bins from ui.R
        x    <- faithful[, 2]
        bins <- seq(min(x), max(x), length.out = input$bins + 1)

        hist(x, breaks = bins, col = 'darkgray', border = 'white', main = Sys.getenv("env_variable_interest"))
    })
}

# Run the application 
shinyApp(ui = ui, server = server)

字符串

z9smfwbn

z9smfwbn1#

我不确定,但我会说你可以在构建镜像时传递env变量,比如:

docker build --build-arg USER=$USER --build-arg PWD=$PWD -t my_image .

字符串
其中$USER$PWD是系统(Linux/Windows.)中已经存在的环境变量。有关详细信息,请查看docker build的文档。

kmbjn2e3

kmbjn2e32#

尝试将环境变量定义放在引号中:

docker run -it --rm -p 3838:3838 -e "env_variable_interest=testname" <shiny_image>

字符串
否则,我猜它试图传递一个名为env_variable_interest=testname的变量,我假设主机操作系统上不存在该变量。
参见docker参考

a0zr77ik

a0zr77ik3#

我通过在项目目录中创建一个.Renviron文件来解决这个问题,以便在运行时将环境变量复制到.Renviron文件中。

#!/bin/bash

# Capture environment variables and write to .Renviron
env > /home/shiny/.Renviron

# Execute the main process (e.g., starting an R server)
exec "$@"

字符串
在dockerfile中添加以下内容:将文件复制到镜像中,使其可执行并将其设置为入口点:

COPY entrypoint.sh /srv/shiny-server/yourapp
RUN chmod +x /srv/shiny-server/yourapp/entrypoint.sh
ENTRYPOINT ["/srv/shiny-server/yourapp/entrypoint.sh"]


请注意,如果你在windows上创建了bash文件,你可能需要在构建时转换它:

apt-get install dos2unix
RUN dos2unix /srv/shiny-server/yourapp/entrypoint.sh

相关问题