【问题标题】:Setting up docker image with R and SQL server drivers使用 R 和 SQL 服务器驱动程序设置 docker 映像
【发布时间】:2019-04-24 17:47:09
【问题描述】:

这可能是一个未充分说明的问题,但由于我花了将近两天时间试图让它发挥作用,我想我可以试一试:

我正在尝试设置一个可以通过 R 与 SQL Server db 通信的 docker 映像(使用 RODBC 或 odbc)

我一直遇到的问题似乎是在运行时建立连接时无法安装(或定位)必需的 SQL 服务器驱动程序:

 con <- dbConnect(odbc(),
             Driver = "SQL Server",
             Server = "xxxx",
             Database = "xxxx",
             UID = "xxx",
             PWD = “xxxx")

有没有人设置过类似的 Docker 镜像?

编辑:

这是我当前的 dockerfile(我已经尝试了多种方法,但这个会重现错误消息)

    FROM rocker/r-ver:3.5.0

    RUN apt-get -qq update \
        && apt-get -qq dist-upgrade -y \
        && apt-get -qq install git unixodbc unixodbc-dev postgresql-9.5 odbc-postgresql libssl-dev sudo -y

    COPY . /usr/local/src/myscripts
    WORKDIR /usr/local/src/myscripts

    RUN R -e 'install.packages("odbc")'
    RUN R -e 'install.packages("plumber")'

    EXPOSE 8000

    CMD ["Rscript", "plumber.R"]

运行容器并执行 odbc 命令给出:

    > library('odbc')
    > con <- dbConnect(odbc(),
    +                    Driver = "SQL Server",
    +                    Server = "xx",
    +                    Database = "xx",
    +                    UID = "xx",
    +                    PWD = "xx")
    Error: nanodbc/nanodbc.cpp:950: 01000: [unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found

【问题讨论】:

  • 数据库在哪里?在卷中还是外部连接?基本想法是在Dockerfile 中加载 R 映像,然后导入任何其他依赖项,例如 SQL Server 驱动程序/连接器。您还必须通过卷或打开端口使数据库对 Docker 容器可见。
  • 您可以编辑您的问题并添加您当前的 Dockerfile 吗?
  • @OrtomalaLokni - 我已将 Dockerfile 添加到问题中
  • @Mako212 - 这将是一个外部连接 - 所以是的,我必须打开一个端口。我现在如何为管道工 API 做这件事,但要学习如何为 SQL 数据库连接做这件事。

标签: r sql-server docker


【解决方案1】:

在您的Dockerfile 中,您正在为 PostgrSQL 安装 ODBC 驱动程序,而不是为 MS SQL 服务器安装。在需要 MS SQL 的 docker 映像中,我使用了 Microsoft 的驱动程序:

FROM rocker/r-ver:3.5.1

RUN apt-get update \
 && apt-get install --yes --no-install-recommends \
        apt-transport-https \
        curl \
        gnupg \
        unixodbc-dev \
 && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
 && curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list \
 && apt-get update \
 && ACCEPT_EULA=Y apt-get install --yes --no-install-recommends msodbcsql17 \
 && install2.r odbc \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/* \
 && rm -rf /tmp/*

在我随后使用的 R 脚本中

con <- odbc::dbConnect(odbc::odbc(),
                 Driver = "ODBC Driver 17 for SQL Server",
                 Server = Sys.getenv("SERVER"),
                 Database = Sys.getenv("DB"),
                 UID = Sys.getenv("USER"),
                 PWD = Sys.getenv("PWD"))

【讨论】:

  • @RalfStaubner 谢谢我会试试这个。我尝试的其中一件事是修改这个 - gist.github.com/ibombonato/fc88f5d5418e42abf3be3449c9893a01 - 但构建这个图像没有运气
  • 使用这个 docker 文件构建退出并出现以下错误ERROR: Job failed: command terminated with exit code 1
  • @atomman 上下文?错误是否在docker builddocker run 期间发生?哪个命令触发了错误?
  • 我正在设置一个 docker 映像以用于 r 包的 CI。在docker build . 期间,构建结束。对我来说,这似乎是一个超时错误。
  • @atomman 为什么你认为这是一个超时?哪个命令失败?
猜你喜欢
  • 2019-01-26
  • 1970-01-01
  • 2014-09-09
  • 2023-01-13
  • 2015-07-21
  • 2017-07-12
  • 1970-01-01
  • 2018-05-06
  • 2011-09-01
相关资源
最近更新 更多