Azure 容器 - 简单的 R 管道工部署问题?

问题描述

我正在 Azure 容器中部署简单的管道工 API,它执行简单的 sql 查询并返回结果。这是我的 Dockerfile。

# start from the rocker/r-ver:4.0.2 image
# minor change to one branch to test deployment
FROM rocker/r-ver:4.0.2

# install the linux libraries needed for plumber
RUN apt-get update -qq && apt-get install -y \
  libssl-dev \
  libcurl4-gnutls-dev \
  libsodium-dev \
  unixodbc-dev \
  r-cran-rodbc \
  curl\
  libxml2-dev
#  libiodbc2-dev

# We need to update Dockerfile to install ODBC Driver 17 for sql Server for
# Ubuntu 20.04 or different version
# here is link: https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15#ubuntu17


RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17
RUN ACCEPT_EULA=Y apt-get install -y mssql-tools
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
# RUN source /etc/bash.bashrc



RUN mkdir -p ~/application

# copy everything from the current directory into the container
copY "/" "application/"

# I probably do not even have to set up workdir
workdir "application/" 

# open port 80 to traffic
EXPOSE 80

# install plumber
RUN R -e "install.packages('plumber')"
RUN R -e "install.packages('renv')"
RUN R -e "install.packages('RODBC')"
RUN R -e 'renv::restore()'


# when the container starts,start the main.R script
ENTRYPOINT ["Rscript","execute_plumber.R"]

API 工作正常。但是,当我连接到容器时,运行 R 并执行 library(RODBC) 我得到关于未找到库的错误。这很令人费解,因为它已经在 Dockerfile 中提到过,但也许它与 renv 有关。我继续安装 install.packages('RODBC')生成错误,我可以通过运行 apt-get install unixodbc-devapt-get install r-cran-rodbc 修复该错误。这些行再次出现在 Dockerfile 中。然后当我尝试连接到 sql 服务器时,我收到有关驱动程序的错误。再次,我可以通过重新执行 Dockerfile 中的行(与 sql Server 17 驱动程序相关)来修复它。

所以我很困惑为什么我需要重新执行 Dockerfile 中已经存在的一些项目。或者当我在 Azure 中单击“连接”时,它实际上将我连接到主机而不是容器?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...