Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=false}
你还可以配置自己的持久存储。
检测 HTTPS 会话
应用服务在前端终止 TLS/SSL。 也就是说,TLS/SSL 请求永远不会进入你的应用程序。 不需要,也不应在应用程序中实现对 TLS/SSL 的任何支持。
前端位于 Azure 数据中心内。 如果对应用程序使用 TLS/SSL,则始终会安全加密 Internet 上的流量。
自定义 ASP.NET 计算机密钥注入
在容器启动过程中,会将自动生成的密钥作为 ASP.NET 加密例程的计算机密钥注入到容器中。 可以通过以下环境变量在容器中找到这些密钥:MACHINEKEY_Decryption
、MACHINEKEY_DecryptionKey
、MACHINEKEY_ValidationKey
、MACHINEKEY_Validation
。
如果你的应用程序依赖于这些密钥,则每次重启时的新密钥可能会重置 ASP.NET 窗体身份验证和视图状态。 要阻止自动重新生成密钥,请手动将其设置为应用服务应用设置。
连接到容器
通过导航到 https://<app-name>.scm.azurewebsites.net/DebugConsole
,可以直接连接到 Windows 容器以执行诊断任务。 工作原理如下:
调试控制台允许执行交互式命令,如启动 PowerShell 会话、检查注册表项,以及导航整个容器文件系统。
它独立于其上方的图形浏览器运行,只显示共享存储中的文件。
在向外扩展的应用程序中,调试控制台连接到一个容器实例。 您可以从顶部菜单中的“实例”下拉列表中选择其他实例。
重新启动应用后,你控制台内对容器所做的任何更改都不会保留(共享存储中的更改除外),因为它不是 Docker 映像的一部分。 要保存更改,如注册表设置和软件安装,请将其设为 Dockerfile 的一部分。
访问诊断日志
应用服务通过 Docker 主机以及容器中的活动记录操作。 默认情况下,会附带 Docker 主机中的日志(平台日志),但容器中的应用程序日志或 web 服务器日志则需要手动启用。 有关详细信息,请参阅启用应用程序日志记录和启用 Web 服务器日志记录。
有多种方法可访问 Docker 日志:
在 Azure 门户中配置
从 Kudu 控制台中
使用 Kudu API
将日志发送到 Azure Monitor
在 Azure 门户中配置
Docker 日志显示在门户中应用的“容器设置”页面中。 日志被截断,但可以单击“下载”来下载所有日志。
从 Kudu 控制台中
导航到 https://<app-name>.scm.azurewebsites.net/DebugConsole
并单击 LogFiles 文件夹以查看各个日志文件。 要下载整个 LogFiles 目录,请单击目录名称左侧的“下载”图标。 还可以使用 FTP 客户端访问此文件夹。
在控制台终端中,默认情况下无法访问 C:\home\LogFiles
文件夹,因为未启用持久共享存储。 要在控制台终端中启用此行为,请启用持久共享存储。
如果尝试使用 FTP 客户端下载当前正在使用的 Docker 日志,可能会由于文件锁定而出现错误。
使用 Kudu API
直接导航到 https://<app-name>.scm.azurewebsites.net/api/logs/docker
以查看 Docker 日志的元数据。 你可能会看到列出了多个日志文件,而 href
属性允许你直接下载日志文件。
要将所有日志一起下载到一个 ZIP 文件中,请访问 https://<app-name>.scm.azurewebsites.net/api/logs/docker/zip
。
自定义容器内存
默认情况下,部署在 Azure 应用服务中的所有 Windows 容器均限制为 1 GB RAM。 您可以通过 Cloud Shell 提供 WEBSITE_MEMORY_LIMIT_MB
应用设置来更改此值。 在 Bash 中:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_MEMORY_LIMIT_MB=2000
在 PowerShell 中运行:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_MEMORY_LIMIT_MB"=2000}
该值以 MB 为单位定义,并且必须小于或等于主机的总物理内存。 例如,在具有 8 GB RAM 的应用服务计划中,所有应用的累积总数 WEBSITE_MEMORY_LIMIT_MB
不得超过 8 GB。 有关每个定价层可用内存的信息,可以在高级 v3 服务计划章节中的应用服务定价中找到。
自定义计算核心数
默认情况下,Windows 容器将运行,其中包含所选定价层的所有可用内核。 例如,你可能想要减少过渡槽使用的内核数。 要减少容器使用的内核数,请将 WEBSITE_CPU_CORES_LIMIT
应用设置设置为首选的内核数。 可以通过 Cloud Shell 设置。 在 Bash 中:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --slot staging --settings WEBSITE_CPU_CORES_LIMIT=1
在 PowerShell 中运行:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_CPU_CORES_LIMIT"=1}
更新应用设置会触发自动重新启动,从而使停机时间最短。 对于生产应用,请考虑将其交换到过渡槽,在过渡槽中更改应用设置,然后将其交换回生产。
转到 Kudu 控制台 (https://<app-name>.scm.azurewebsites.net
) 并使用 PowerShell 键入以下命令,以验证调整后的数字。 每个命令输出一个数字。
Get-ComputerInfo | ft CsNumberOfLogicalProcessors # Total number of enabled logical processors. Disabled processors are excluded.
Get-ComputerInfo | ft CsNumberOfProcessors # Number of physical processors.
处理器可能是多核处理器或超线程处理器。 有关每个定价层可用内核数的信息,可以在高级 v3 服务计划章节中的应用服务定价中找到。
自定义运行状况 ping 行为
应用服务认为容器在容器启动时成功启动并响应 HTTP ping。 运行状况 ping 请求包含标头 User-Agent= "App Service Hyper-V Container Availability Check"
。 如果容器在一段时间后启动但不响应 ping,应用服务会在 Docker 日志中记录一个事件,指出容器未启动。
如果你的应用程序占用大量资源,则容器可能无法及时响应 HTTP ping。 要控制 HTTP ping 失败时的操作,请设置 CONTAINER_AVAILABILITY_CHECK_MODE
应用设置。 可以通过 Cloud Shell 设置。 在 Bash 中:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings CONTAINER_AVAILABILITY_CHECK_MODE="ReportOnly"
在 PowerShell 中运行:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"CONTAINER_AVAILABILITY_CHECK_MODE"="ReportOnly"}
下表列出了可能的值:
安全外壳 (SSH) 通常用于通过命令行终端以远程方式执行管理命令。 若要使用自定义容器启用 Azure 门户 SSH 控制台功能,需要执行以下步骤:
使用以下示例内容创建标准 sshd_config 文件,并将其放置在应用程序项目根目录上:
Port 2222
ListenAddress 0.0.0.0
LoginGraceTime 180
X11Forwarding yes
Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
MACs hmac-sha1,hmac-sha1-96
StrictModes yes
SyslogFacility DAEMON
PasswordAuthentication yes
PermitEmptyPasswords no
PermitRootLogin yes
Subsystem sftp internal-sftp
此文件配置 OpenSSH,并且必须包含以下项,以符合 Azure 门户 SSH 功能:
Port
必须设置为 2222。
Ciphers
必须至少包含此列表中的一项:aes128-cbc,3des-cbc,aes256-cbc
。
MACs
必须至少包含此列表中的一项:hmac-sha1,hmac-sha1-96
。
创建一个名称为 entrypoint.sh
的入口点脚本(或更改任何现有的入口点文件),并添加用于启动 SSH 服务的命令以及应用程序启动命令。 以下示例演示如何启动 Python 应用程序。 请根据项目语言/堆栈替换最后一个命令:
Debian
Alpine
# Start and enable SSH
RUN apt-get update \
&& apt-get install -y --no-install-recommends dialog \
&& apt-get install -y --no-install-recommends openssh-server \
&& echo "root:Docker!" | chpasswd \
&& chmod u+x ./entrypoint.sh
COPY sshd_config /etc/ssh/
EXPOSE 8000 2222
ENTRYPOINT [ "./entrypoint.sh" ]
根密码必须恰好是 Docker!
,因为应用服务使用它以使你能够使用容器访问 SSH 会话。 此配置不允许从外部建立到容器的连接。 容器的端口 2222 只能在专用虚拟网络的桥网络中访问,Internet 上的攻击者无法访问该端口。
重新生成 Docker 映像并将其推送到注册表,然后在 Azure 门户上测试 Web 应用 SSH 功能。
有关进一步故障排除的详细信息,请参阅 Azure 应用服务 OSS 博客:在用于容器的 Linux Web 应用上启用 SSH
访问诊断日志
可以访问在容器中生成的控制台日志。
首先,请运行以下命令,以便启用容器日志记录功能:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
将 <app-name>
和 <resource-group-name>
替换为适合 Web 应用的名称。
启用容器日志记录功能以后,请运行以下命令来查看日志流:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
如果没有立即看到控制台日志,请在 30 秒后重新查看。
若要随时停止日志流式处理,可键入 CtrlC。
也可通过浏览器在 https://<app-name>.scm.azurewebsites.net/api/logs/docker
中检查日志文件。
在 Docker Compose 中使用持久性存储
预览版限制
Docker Compose 选项
在 Docker Compose 中使用持久性存储
多容器应用(如 WordPress)需要持久存储才能正常工作。 要启用持久存储,你的 Docker Compose 配置必须指向容器外部的存储位置。 在应用重新启动后,容器中的存储位置不会保存更改。
通过在 Cloud Shell 中使用 az webapp config appsettings set 命令来设置 WEBSITES_ENABLE_APP_SERVICE_STORAGE
应用设置,以此启用持久存储。
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE
在 docker-compose.yml 文件中,将 volumes
选项映射到 ${WEBAPP_STORAGE_HOME}
。
WEBAPP_STORAGE_HOME
是应用服务中已映射到应用持续性存储的环境变量。 例如:
wordpress:
image: <image name:tag>
volumes:
- ${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html
- ${WEBAPP_STORAGE_HOME}/phpmyadmin:/var/www/phpmyadmin
- ${WEBAPP_STORAGE_HOME}/LogFiles:/var/log
预览版限制
多容器目前以预览版提供。 不支持以下应用服务平台功能:
身份验证/授权
Docker Compose 方案不支持虚拟网络集成
目前,Azure 应用服务上的 Docker Compose 的限制为 4,000 个字符。
Docker Compose 选项
以下列表显示了支持和不支持的 Docker Compose 配置选项:
支持的选项
entrypoint
image
ports
restart
services
卷(不支持映射到 Azure 存储)
不支持的选项
build(不允许)
depends_on(已忽略)
networks(忽略)
secrets(忽略)
除了 80 和 8080 之外的端口(忽略)
默认环境变量(如 $variable and ${variable}
)与 docker 中的不同
“version x.x”始终需要是文件中的第一个 YAML 语句
端口部分必须使用带引号的数字
图像和卷部分必须带引号,并且不能具有权限定义
卷部分在卷名后不得有空的大括号
未显式指明的任何其他选项在公共预览版中将被忽略。
日志中的 robots933456
你可能会在容器日志中看到以下消息:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
可以放心忽略此消息。 /robots933456.txt
是一个虚拟 URL 路径,应用服务使用它来检查容器能否为请求提供服务。 404 响应只是指示该路径不存在,但它让应用服务知道容器处于正常状态并已准备就绪,可以响应请求。
教程:使用自定义容器将自定义软件迁移到 Azure 应用服务
教程:多容器 WordPress 应用
或者参阅其他某些资源:
环境变量和应用设置参考
在 Windows/Linux 容器中加载证书