使用TestContainers启动.NET 8 Web API容器时遇连接拒绝错误求助
问题原因
你指定的Docker镜像名称带有localhost/testcontainers前缀,Docker会将这个前缀解析为本地私有仓库地址,尝试从http://localhost/v2/拉取镜像。但你并未搭建本地Docker私有仓库,导致连接被拒绝,触发了这个InternalServerError异常。
解决方法
方案一:无需私有仓库,直接使用本地镜像
去掉镜像名称中的localhost/testcontainers仓库前缀,让Docker直接使用本地构建的镜像:
private readonly DockerImage image = new DockerImage("MyWebApi", DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString());
或者通过三段式参数,将仓库名留空:
private readonly DockerImage image = new DockerImage("", "MyWebApi", DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString());
注意:使用前确保已通过docker build -t MyWebApi:<标签> .命令将Web API镜像构建到本地Docker环境中。
方案二:搭建本地私有仓库(如需)
如果确实需要使用本地私有仓库,按以下步骤操作:
- 启动本地Docker仓库容器:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
- 配置Docker允许本地仓库的HTTP访问(默认Docker要求私有仓库使用HTTPS,本地仓库默认是HTTP):
- Windows/macOS:打开Docker Desktop设置,在Docker Engine中添加
"insecure-registries": ["localhost:5000"],保存后重启Docker。 - Linux:编辑
/etc/docker/daemon.json文件,添加上述配置,然后执行systemctl restart docker重启Docker服务。
- Windows/macOS:打开Docker Desktop设置,在Docker Engine中添加
- 修改TestContainers的镜像配置,使用带端口的本地仓库地址:
private readonly DockerImage image = new DockerImage("localhost:5000", "MyWebApi", DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString());
- 构建镜像并推送到本地仓库:
docker build -t localhost:5000/MyWebApi:<标签> . docker push localhost:5000/MyWebApi:<标签>
内容的提问来源于stack exchange,提问作者Tenacious
相关产品推荐
相关产品推荐

