【发布时间】:2020-08-30 06:28:44
【问题描述】:
我正在制作一个闪亮的 R 应用程序,它使用 DBI 和 odbc 调用数据库(SQL Server)并显示一个表。我的应用程序在我的本地机器上完美运行。但是,当我尝试将闪亮的应用程序 dockerize 时,它只是无法启动。不知道为什么这不起作用。
我觉得我可能需要在我的 dockerfile 中安装 odbc 驱动器。也许我还缺少其他东西......
我是 docker 新手。如果有人可以展示我如何修改我的 dockerfile 以便我的闪亮应用程序也可以用作 docker 容器,我将不胜感激。
下面是我的dockerfile:
# Base image https://hub.docker.com/u/rocker/
FROM rocker/shiny:latest
# system libraries of general use
RUN apt-get update -qq && apt-get -y --no-install-recommends install \
libxml2-dev \
libcairo2-dev \
libsqlite3-dev \
libmariadbd-dev \
libpq-dev \
libssh2-1-dev \
unixodbc-dev \
libcurl4-openssl-dev \
libssl-dev
## update system libraries
RUN apt-get update && \
apt-get upgrade -y && \
apt-get clean
# Install R packages that are required
RUN R -e "install.packages(c('dplyr','DT', 'DBI', 'odbc'), repos='http://cran.rstudio.com/')"
# Copy configuration files into the Docker image
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf
COPY /app /srv/shiny-server/
# Make the ShinyApp available at port 80
EXPOSE 80
# Copy further configuration files into the Docker image
COPY shiny-server.sh /usr/bin/shiny-server.sh
CMD ["/usr/bin/shiny-server.sh"]
下面是我闪亮的 ui.r:
ui <- fluidPage(
titlePanel("Database table"),
sidebarLayout(
sidebarPanel(),
mainPanel(
fluidRow (
column(12, DT::dataTableOutput('datatable')) )
)
)
)
我的服务器.r
server <- function(input, output, session) {
conn <- DBI::dbConnect(odbc::odbc(),
Driver = "ODBC Driver 17 for SQL Server",
Server = 'xxxxxx',
Database = "xxxxxx",
UID = "xxxxxx",
PWD = 'xxxxxxx',
port=1433)
df = dbGetQuery(conn, "SELECT * FROM myTable")
dbDisconnect(conn)
output$datatable <- DT::renderDataTable({
DT::datatable(df)
})
}
global.r:
library(shiny)
library(DBI)
library(odbc)
library(dplyr)
library(DT)
【问题讨论】:
-
我认为我们遗漏了一部分,您是在运行 SQL Server 容器,还是 R 容器应该与主机上的 SQL Server 通信?另外:“但是,当我尝试将闪亮的应用程序 docker 化时,它只是无法启动。” - 我们可以看到失败的截图吗?如果您尝试从容器中手动运行 R 程序会发生什么?应用程序不工作还是 docker 无法启动?我敢打赌问题是数据库连接,但仅基于该描述很难确定。可能值得在 R 脚本中添加错误处理。让我们知道您的进展情况
标签: r docker shiny dockerfile odbc