微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。