我的r闪亮应用需要在dockerfile中使用odbc驱动程序

如何解决我的r闪亮应用需要在dockerfile中使用odbc驱动程序

我正在制作一个R Shiny应用程序,该应用程序使用DBI和odbc调用数据库(SQL Server)并显示一个表。我的应用程序可以在本地计算机上完美运行。但是,当我尝试将闪亮的应用程序进行docker化时,它只是无法启动。不知道为什么那行不通。

我觉得我可能需要在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的ODBC驱动程序17”之类的错误,则可能是您尚未在Dockerfile中安装ODBC驱动程序。

我遇到了同样的问题,但是将其放入我的Dockerfile:https://community.rstudio.com/t/odbc-drivers-docker/32714时,它为我解决了。

,

我仍然认为我们没有足够的信息(这是不理想的,因为我们看不到具体的错误消息来确认这是Docker容器与SQL Server之间的连接问题),但是我会陈述我的假设并试一试。

您提到,您的堆栈在本地运行时没有问题,仅当您将R应用程序移动到无法使用的容器中时。这使我认为您的SQL Server实例在本地运行。

再一次很难像server.r中那样确定。您已经检查了数据库端点(Server = 'xxxxxx',)。如果它是外部端点,则对其进行审查是有意义的,但是,如果它是内部/本地主机地址,则可能会有用。

我不熟悉此堆栈,但据我所读,您在ODBC方面做得正确:您安装了系统软件包,安装了R库,并包括了R库。看这篇文章似乎应该是正确的:https://nhsrcommunity.com/blog/sql-server-database-connections-in-r/

所以,我的理论是,尽管您的服务器配置位于Docker容器中(它们不再共享相同的环回/本地主机!),但仍然指向localhost127.0.0.1

因此,请尝试将server.r数据库端点更新为Server = 'host.docker.internal',

我认为这是一个很好的机会,有关将Docker容器连接到主机服务的更多信息,请参阅此线程:https://stackoverflow.com/a/24326540/3080207host.docker.internal应该可以,但是我认为这可能取决于您正在运行的操作系统以及您正在运行的Docker版本。

如果我的成绩超出标准,请提供更多信息:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-