使用R和SQL Server驱动程序设置Docker映像

时间:2018-10-23 16:46:50

标签: r sql-server docker

这可能是一个未明确说明的问题,但是由于我花了将近两天的时间才能使其正常工作,所以我想尝试一下:

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

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

 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

1 个答案:

答案 0 :(得分:4)

Dockerfile中,您要安装用于PostgrSQL的ODBC驱动程序,而不是用于MS SQL服务器的ODBC驱动程序。在需要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"))