Azure Functions本地V2运行时异常求助:无法终止容器
别着急,咱们一步步来排查Hyper-V和Docker的状态,下面是你可以直接在PowerShell里执行的命令,以及对应的结果解读:
因为Azure Functions本地运行时依赖Docker,而Docker在Windows Server 2016上是基于Hyper-V的,所以先确认Hyper-V是否正常工作:
检查Hyper-V是否已安装启用
打开PowerShell执行:Get-WindowsFeature -Name Hyper-V看输出里的
Install State列,如果显示Installed说明Hyper-V已经启用;如果是Available,那你需要先安装它(执行Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart,服务器会重启)。检查Hyper-V核心服务状态
Hyper-V的正常运行依赖几个关键服务,执行命令查看它们的运行状态:Get-Service -Name vmms, vmicguestinterface, vmicshutdown, vmicheartbeat, vmicvss所有服务的
Status都应该是Running,如果有服务没启动,用Start-Service <服务名>手动启动,比如Start-Service vmms。验证Hyper-V虚拟机功能
执行命令查看当前Hyper-V下的虚拟机(Docker会创建自己的虚拟机):Get-VM如果Docker正常,你应该能看到一个名为
MobyLinuxVM的虚拟机,状态为Running。
接下来确认Docker daemon和相关组件是否正常:
检查Docker服务状态
执行命令看Docker服务是否在运行:Get-Service -Name Docker如果
Status不是Running,先尝试重启服务:Restart-Service Docker测试Docker daemon响应
执行命令验证Docker daemon是否能正常响应:docker info如果能输出一堆系统配置、镜像数量、容器数量等信息,说明daemon没问题;如果报错提示无法连接,那大概率是Docker服务没启动或者Hyper-V的虚拟机有问题。
检查所有Docker容器状态
执行命令查看所有容器(包括已停止的)的状态:docker ps -a找到和Azure Functions相关的容器,看看它的
STATUS列是不是Exited或者Unhealthy,如果是,尝试手动启动它:docker start <容器ID>,或者查看容器日志找错误:docker logs <容器ID>。验证Docker基础功能
用官方测试镜像验证Docker能否正常运行容器:docker run hello-world如果能输出欢迎信息,说明Docker的基本功能是正常的,问题可能出在Azure Functions的容器配置上。
查看Docker日志找错误
如果上面的步骤都没找到问题,可以查看Docker的日志文件,找具体的报错信息:Get-Content "C:\ProgramData\Docker\logs\docker.log"搜索
Cannot kill container相关的日志,能帮你定位具体是哪个容器出了问题,以及为什么无法终止它。
内容的提问来源于stack exchange,提问作者Israel Calderon

