问题描述

根据以下DockerFile文件,创建了一个ASP.NET Core的 helloworld 镜像,通过监听3721端口来接受请求。

# 1. 指定编译和发布应用的镜像
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build # 2. 指定(编译和发布)工作目录
WORKDIR /app # 3. 拷贝.csproj到工作目录/app,然后执行dotnet restore恢复所有安装的NuGet包
COPY *.csproj ./
RUN dotnet restore # 4. 拷贝所有文件到工作目录(/app),然后执行dotnet publish命令将应用发布到/app/out目录下
COPY . ./
RUN dotnet publish -c Release -o out # 5. 编译生成Docker镜像
# 5.1.设置基础镜像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime # 5.2. 设置(运行)工作目录,并将发布文件拷贝到out子目录下
WORKDIR /app
COPY --from=build /app/out . # 5.3. 利用环境变量设置ASP.NET Core应用的监听地址
ENV ASPNETCORE_URLS http://0.0.0.0:3721 # 5.4. 执行dotnet命令启动ASP.NET Core应用
ENTRYPOINT ["dotnet", "helloworld.dll"]

在本地构建镜像后,可以通过 docker run -d -p 8088:3721 --name myapp helloworldapp,指定本机8088端口映射到Docker Container中的3721端口。

但是在部署到微软云后,如何来设置映射端口呢? 默认情况下App Service 使用的是80端口,从而导致容器启动失败。

错误日志为:

2022-06-15T08:10:50.546Z INFO - Status: Downloaded newer image for lbacrtest01.azurecr.cn/helloworldapp:v1
2022-06-15T08:10:50.587Z INFO - Pull Image successful, Time taken: 2 Minutes and 5 Seconds
2022-06-15T08:10:50.676Z INFO - Starting container for site
2022-06-15T08:10:50.676Z INFO - docker run -d --expose=80 --name lbimagetest01_0_1e3ba35e -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=lbimagetest01 -e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=lbimagetest01.chinacloudsites.cn -e WEBSITE_INSTANCE_ID=fca8f86e2aee5216a9504a5ef5a82caeab7a80b1093c88842a262c639a933047 -e WEBSITE_USE_DIAGNOSTIC_SERVER=False lbacrtest01.azurecr.cn/helloworldapp:v1 2022-06-15T08:10:50.676Z INFO - Logging is not enabled for this container.
Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here.
2022-06-15T08:11:02.091Z INFO - Initiating warmup request to container lbimagetest01_0_1e3ba35e for site lbimagetest01
2022-06-15T08:11:17.595Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 15.5042301 sec
2022-06-15T08:11:33.023Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 30.9320513 sec
2022-06-15T08:11:48.176Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 46.0847374 sec
2022-06-15T08:12:03.309Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 61.2176683 sec
2022-06-15T08:12:18.466Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 76.3745667 sec
2022-06-15T08:12:33.640Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 91.5484349 sec
2022-06-15T08:12:48.766Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 106.6748131 sec
2022-06-15T08:13:03.926Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 121.8346172 sec
2022-06-15T08:13:19.084Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 136.9925924 sec
2022-06-15T08:13:34.841Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 152.7495565 sec
2022-06-15T08:13:54.936Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 172.8446712 sec
2022-06-15T08:14:10.134Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 188.0428893 sec
2022-06-15T08:14:29.366Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 207.274851 sec
2022-06-15T08:14:44.507Z INFO - Waiting for response to warmup request for container lbimagetest01_0_1e3ba35e. Elapsed time = 222.4153247 sec
2022-06-15T08:14:52.646Z ERROR - Container lbimagetest01_0_1e3ba35e for site lbimagetest01 did not start within expected time limit. Elapsed time = 230.5552784 sec
2022-06-15T08:14:58.488Z ERROR - Container lbimagetest01_0_1e3ba35e didn't respond to HTTP pings on port: 80, failing site start. See container logs for debugging.

问题解答

在App Service中,如果要为容器暴露端口,可以使用应用配置参数 WEBSITES_PORT,  把它的值设置为DockerFile中配置的端口就行。如本示例中就配置它的值为3721.

保存后将自动重启App Service,查看Docker日志,发现 --expose的端口变为3721, Container 初始化成功并且准备接受请求。

2022-06-15T08:14:59.910Z INFO - Pulling image: lbacrtest01.azurecr.cn/helloworldapp:v1
2022-06-15T08:15:00.307Z INFO - v1 Pulling from helloworldapp
2022-06-15T08:15:00.318Z INFO - Digest: sha256:1f6d1d7452248155c22adac3007d19c59da2825d982da8383fc2cf33f80cade7
2022-06-15T08:15:00.325Z INFO - Status: Image is up to date for lbacrtest01.azurecr.cn/helloworldapp:v1
2022-06-15T08:15:00.327Z INFO - Pull Image successful, Time taken: 0 Minutes and 0 Seconds
2022-06-15T08:15:00.488Z INFO - Starting container for site
2022-06-15T08:15:00.495Z INFO - docker run -d --expose=3721 --name lbimagetest01_0_fa97e372 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=3721 -e WEBSITE_SITE_NAME=lbimagetest01 -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=lbimagetest01.chinacloudsites.cn -e WEBSITE_INSTANCE_ID=fca8f86e2aee5216a9504a5ef5a82caeab7a80b1093c88842a262c639a933047 -e WEBSITE_USE_DIAGNOSTIC_SERVER=False lbacrtest01.azurecr.cn/helloworldapp:v1 2022-06-15T08:15:00.496Z INFO - Logging is not enabled for this container.
Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here.
2022-06-15T08:15:04.397Z INFO - Initiating warmup request to container lbimagetest01_0_fa97e372 for site lbimagetest01
2022-06-15T08:15:05.738Z INFO - Container lbimagetest01_0_fa97e372 for site lbimagetest01 initialized successfully and is ready to serve requests.

附录:创建,推送,部署Image的命令

## 本地构建 helloworldapp 镜像文件
docker build -t helloworldapp . ## 本地运行 helloworldapp 镜像,8088端口映射容器中3721端口
docker run -d -p 8088:3721 --name myapp helloworldapp ## 登录到ACR(azure容器库)中
docker login <acrtest01>.azurecr.cn --username <testuser01> ## 与ACR关联本地镜像文件
docker tag helloworldapp:v1 <acrtest01>.azurecr.cn/helloworldapp:v1 ## PUSH 镜像文件到ACR中
docker push <acrtest01>.azurecr.cn/helloworldapp:v1

参考文档:

使用自定义容器将自定义软件迁移到 Azure 应用服务:https://docs.azure.cn/zh-cn/app-service/tutorial-custom-container?pivots=container-linux#configure-app-service-to-deploy-the-image-from-the-registry

【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?的更多相关文章

  1. 【Azure 应用服务】部署Jar到App Service for Linux,因启动命令路径配置错误而引起:( Application Error 问题

    问题描述 App Service for Linux 资源创建完成后,通过FTP方式把 .jar包(logdemo.jar)包上传到 /site/wwwroot/ 文件夹后,在App Service的 ...

  2. 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法

    问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...

  3. 【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)

    问题描述 如何在一个AppService下同时部署运行多个Java 应用程序呢? 问题解答 因为App Service的默认根目录为 wwwroot.如果需要运行多个Java 应用程序,需要在 www ...

  4. 【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法

    问题描述 在App Service for Windows的环境中,当前只提供了PHP 7.4 版本的选择情况下,如何实现自定义PHP Runtime的版本呢? 如 PHP Version 8.1.9 ...

  5. linux设置预留端口号,防止监听端口被占用 ip_local_reserved_ports

    1. 背景 linux服务器启动时,会对指定的端口进行监听bind,如果同一个机器上这个端口已经被使用,则监听失败,程序无法启动. linux客户端连接服务器accept时,系统会分配本地临时端口用于 ...

  6. 【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤

    问题描述 实现部署NodeJS Express应用在App Service Linux环境中,并且使用Microsoft Authentication  Library(MSAL)来实现登录Azure ...

  7. 【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php

    问题描述 参考官方文档部署 PHP Laravel 项目到App Service for Linux环境中,但是访问应用时候遇见了500 Server Error 错误. 从部署的日志中,可以明确看出 ...

  8. 【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑

    编写Java Spring Boot应用,通过配置logging.path路径把日志输出在指定的文件夹中. 第一步:通过VS Code创建一个空的Spring Boot项目 第二步:在applicat ...

  9. 【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https

    问题描述 在上篇博文"[Azure 应用服务]App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)"中,实现了通过 HT ...

  10. 【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志

    问题描述 在App Service For Windows的环境中,我们可以通过ArmClient 工具发送POST请求在Web应用的实例中抓取网络日志,但是在App Service For Linu ...

随机推荐

  1. 全球 IPv4 耗尽,下个月开始收费!

    哈喽大家好,我是咸鱼 IPv4(Internet Protocol version 4)是互联网上使用最广泛的网络层协议之一,于1981年在 RFC 791 中发布,它定义了 32 位的IP地址结构和 ...

  2. 京东金融APP-新交互技术“虚拟数字人”赋能世界杯主题营销

    作者:平台研发部,智能服务与产品部 距离加文·伍德提出web3.0已经过去8年时间,这8年加文·伍德创建的以太坊大放异彩,同时由web3.0引出的数字人.元宇宙也生根发芽,茁壮成长,带来了非凡的用户体 ...

  3. vue3新特性

    值得注意的新特性 1==> 组合式 API 2==> Teleport 3==> 片段 4==> 触发组件选项 5==> createRenderer API 来自 @v ...

  4. git push卡住了 git push writing object

    解决方案: 执行命令:$ git config --global http.postBuffer 524288000 再次push 会卡在这里:POST git-receive-pack(892384 ...

  5. 探索 GO 项目依赖包管理与Go Module常规操作

    探索 GO 项目依赖包管理与Go Module常规操作 目录 探索 GO 项目依赖包管理与Go Module常规操作 一.Go 构建模式的演变 1.1 GOPATH (初版) 1.1.1 go get ...

  6. 【MySQL】InnoDB vs MyISAM

      MySQL默认数据库引擎 事务支持 索引类型 索引数据结构 对锁的支持 使用场景 关于count(*) 外键支持 InnoDB 5.1版本后,是 默认为Read committed 聚集索引,叶子 ...

  7. 数据挖掘机器学习[五]---汽车交易价格预测详细版本{模型融合(Stacking、Blending、Bagging和Boosting)}

    题目出自阿里天池赛题链接:零基础入门数据挖掘 - 二手车交易价格预测-天池大赛-阿里云天池 相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据 ...

  8. 2.6 CE修改器:代码注入功能

    从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一.在第6关的时候我们说到指针的找法,用基址定位动态地址.但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大.代码 ...

  9. Windows系统phpstudy+PbootCMS搭建网站记录

    环境 Windows 10 phpstudy v8.1           下载地址:https://www.xp.cn/download.html PbootCMS v3.2.4  下载地址:htt ...

  10. iPhone 15 Pro Max的Type-C接口有多牛?实测USB3比USB2快11倍

    苹果最新的iPhone 15系列和iPhone 15 Pro系列新机,尽管两者都是Type-C接口,但速度相差20倍. 据了解,iPhone 15 Pro/Max搭载的苹果A17 Pro芯片内含专门的 ...