Docker容器中R连接Azure SQL Server时Swagger端点异常排查
问题:Azure Functions定时器触发Docker容器中R连接SQL Server时Swagger端点无法访问
我尝试通过Azure Functions定时器触发Docker容器中的R程序连接Azure SQL Server。本地机器上的R可以正常连接该SQL Server,但本地测试Docker镜像时,预期的定时器触发Swagger端点无法在浏览器打开,即使使用Docker Compose解决了定时器触发的存储需求后仍是如此。
我此前曾用相同方法搭建过自定义定时器触发,实现连接并上传至Blob容器,该实例已成功按指定间隔触发,镜像/容器托管于ACR。
需要明确的问题
- 为何本次Swagger API端点无法正常工作?
- 这是否与我在Docker容器中访问SQL Server有关?我的R脚本使用odbc包,并传入了所有相关信息(驱动名称、数据库名称、uid、密码等)。
- 是否需要在容器中暴露端口?若需要,应暴露哪些端口及原因?
我的最终计划是将容器以与Blob实例相同的方法托管于ACR。此前本地测试类似项目时,最初会因定时器触发需分配存储而报错,但重试后可访问Swagger文档,通过POST请求触发端点运行R代码;但本次完全无法访问文档。
我的Dockerfile内容
FROM mcr.microsoft.com/azure-functions/dotnet:4-appservice ENV AzureWebJobsScriptRoot=/home/site/wwwroot \ AzureFunctionsJobHost__Logging__Console__IsEnabled=true RUN apt-get update && apt-get install -y gnupg RUN apt-key adv --keyserver keyserver.ubuntu.com \ --recv-key '95C0FAF38DB3CCAD0C080A7BDC78B2DDEABC47B7' RUN echo "deb http://cloud.r-project.org/bin/linux/debian bullseye-cran40/" > /etc/apt/sources.list.d/backports.list RUN apt-get update && \ apt-get install -y \ libxml2-dev \ libsodium-dev \ libsodium23 \ -t bullseye-cran40 r-base # 安装ODBC驱动相关 RUN curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc RUN curl https://packages.microsoft.com/config/debian/11/prod.list | tee /etc/apt/sources.list.d/mssql-release.list RUN apt-get update -y RUN ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev mssql-tools # R的odbc包需在此之后安装 RUN apt-get install -y --no-install-recommends \ libcurl4-openssl-dev \ libssl-dev libxt6 && \ mkdir -p ~/.local/share/renv && \ R -e "install.packages('renv', repos='http://cran.rstudio.com/')" # 拆分复制步骤以加快重建速度 COPY renv.lock /home/site/wwwroot/renv.lock WORKDIR /home/site/wwwroot RUN R -e "renv::restore(prompt=FALSE)" COPY image_timer_predict_trigger/ /home/site/wwwroot/image_timer_predict_trigger COPY host.json /home/site/wwwroot/host.json COPY handler.R /home/site/wwwroot/handler.R COPY handle_this.R /home/site/wwwroot/handle_this.R COPY run_job.R /home/site/wwwroot/run_job.R
内容的提问来源于stack exchange,提问作者dempseynoel
相关产品推荐
相关产品推荐

