Azure托管构建代理使用TestContainers时找不到Docker镜像报错No such image
Azure托管构建代理上TestContainers.MySql镜像找不到问题排查与解决
问题背景
- 运行环境:
windows-2022Azure托管构建代理,基于.NET Core开发,项目引入TestContainers.MySql NuGet包 - 异常现象:本地运行时可正常拉取Docker镜像并创建容器;但在Azure代理上执行测试时,抛出
Docker.DotNet.DockerImageNotFoundException,核心错误提示:
Docker.DotNet.DockerImageNotFoundException : Docker API responded with status code=NotFound, response={"message":"No such image: mcr.microsoft.com/mssql/server:2019-CU18-ubuntu-20.04"}
日志显示虽有“Docker image mcr.microsoft.com/mssql/server:2019-CU18-ubuntu-20.04 created”的记录,但实际启动容器时仍提示镜像不存在。
解决方法
1. 强制设置镜像拉取策略
在TestContainers配置中明确设置拉取策略为Always,确保构建代理主动从仓库拉取镜像,不依赖本地缓存:
var container = new MySqlBuilder() .WithImage("mcr.microsoft.com/mssql/server:2019-CU18-ubuntu-20.04") .WithPullPolicy(PullPolicy.Always) .Build();
2. 切换Docker容器模式
由于使用Windows代理,而目标镜像是Linux版本(ubuntu-20.04),需确保Docker启用Linux容器模式。在构建流水线中添加PowerShell步骤切换:
& "C:\Program Files\Docker\Docker\DockerCli.exe" -SwitchLinuxEngine Start-Sleep -Seconds 30
3. 提前手动拉取镜像
在测试执行前,添加Docker拉取命令确保镜像已存在于代理环境:
docker pull mcr.microsoft.com/mssql/server:2019-CU18-ubuntu-20.04
4. 验证镜像名称正确性
确认代码中使用的镜像标签与仓库中实际存在的版本一致,避免版本号拼写错误。可在本地执行docker pull命令验证镜像是否可正常获取。
内容的提问来源于stack exchange,提问作者Victorio Berra
相关产品推荐
相关产品推荐

