C# Docker.DotNet xUnit测试错误,无法分配请求的地址/var/run/Docker.sock
版本C# Docker.DotNet xUnit测试错误,无法分配请求的地址/var/run/Docker.sock,c#,docker,.net-core,C#,Docker,.net Core,版本 Docker引擎CE v19.03.8 dotnetsdkv3.1.301 Docker.DotNet v3.125.2 xUnit v2.4.0 设置 我正在使用Docker.DotNet包管理ASP.NET核心API项目中功能测试的容器依赖项 我使用了这个blog()中的代码,创建了一个类来管理我的测试项目中与Docker API的交互——我在文章末尾添加了这段代码,因为它相对较长 问题 当我从终端运行dotnet test命令时,一切正常。但是,我想在构建Dockerfile时运
- Docker引擎CE v19.03.8
- dotnetsdkv3.1.301
- Docker.DotNet v3.125.2
- xUnit v2.4.0
dotnet test
命令时,一切正常。但是,我想在构建Dockerfile
时运行这些测试
当我运行docker build-t我的项目时。
我得到以下错误:
System.Net.Http.HttpRequestException:连接失败
----System.Net.Internals.SocketExceptionFactory+ExtendedSocketException:无法分配请求的地址/var/run/docker.sock
堆栈跟踪:
位于Microsoft.Net.Http.Client.ManagedHandler.ProcessRequestAsync(HttpRequestMessage请求,CancellationToken CancellationToken)
位于Microsoft.Net.Http.Client.ManagedHandler.SendAsync(HttpRequestMessage请求,CancellationToken CancellationToken)
在Docker.DotNet.DockerClient.PrivateMakeRequestAsync的System.Net.Http.HttpClient.FinishSendAsyncBuffered(任务1 sendTask,HttpRequestMessage请求,取消令牌源cts,布尔处理)中(TimeSpan超时、HttpCompletionOption completionOption、HttpMethod方法、字符串路径、IQueryString查询字符串、IDictionary
2头、IRequestContent数据、CancellationToken CancellationToken)
Docker.DotNet.DockerClient.PrivateMakeRequestAsync(TimeSpan超时、HttpCompletionOption completionOption、HttpMethod方法、字符串路径、IQueryString查询字符串、IDictionary2头、IRequestContent数据、CancellationToken CancellationToken)上的(Docker.DotNet.ContainerOperations.CreateContainerAsync(CreateContainerParameters参数,CancellationToken CancellationToken)上的IEnumerable
1 errorHandlers、HttpMethod方法、字符串路径、IQueryString查询字符串、IRequestContent正文、IDictionary2头、TimeSpan超时、CancellationToken标记)在/src/My.FunctionalTests/Helpers/Docker/DockerSetup.cs第34行中的My.FunctionalTests.Helpers.DockerSetup.StartContainerAsync(字符串图像、字符串标记、字符串主机端口、字符串容器端口、IList
1环境变量)
在/src/My.FunctionalTests/Helpers/docker/DockerSetupExtensions.cs中的My.FunctionalTests.Helpers.DockerSetupExtensions.startocalstackasync(DockerSetup-docker,String-services)中
在/src/My.FunctionalTests/MyTests.cs中的My.FunctionalTests.MyTests.GetAsync\u Valid\u Success(字符串url)中:第36行
在做了一些谷歌搜索之后,这可能是由localhost
冲突引起的。我对这一点有点不了解,所以我想知道
- 为什么这个错误会抛出
- 我能做些什么来解决它
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
# Copy csproj and restore as distinct layers
COPY ./My.sln .
COPY ./My.API/My.API.csproj ./My.API/My.API.csproj
COPY ./My.FunctionalTests/My.FunctionalTests.csproj ./My.FunctionalTests/My.FunctionalTests.csproj
RUN dotnet restore
# Copy everything else and build
COPY . .
RUN dotnet publish -c Release -o /app
# Functional tests
FROM build as functionaltest
WORKDIR /src/My.FunctionalTests
RUN dotnet test
DockerSetup.cs
公共类DockerSetup
{
私有只读DockerClient\u DockerClient;
公共DockerSetup()
{
_dockerClient=新的dockerClient配置(新Uri(DockerClientConfiguration()).CreateClient();
}
私有静态字符串DockerApiUri()
{
var isWindows=RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
如果(iWindows)
{
返回“npipe://./pipe/docker_engine";
}
var isLinux=RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
var isMacOS=RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
if(isLinux | | isMacOS)
{
返回“unix:/var/run/docker.sock”;
}
抛出新异常(“无法确定运行此操作的操作系统,似乎不是Windows、MacOS或Linux!?”;
}
公共异步任务PullImageAsync(字符串图像、字符串标记)
{
等待_dockerClient.Images
.CreateImageAsync(新的ImagesCreateParameters
{
FromImage=image,
标签=标签
},
新建AuthConfig(),
新进展();
}
公共异步任务StartContainerAsync(字符串图像、字符串标记、字符串主机端口、字符串容器端口、IList环境变量)
{
var response=await\u dockerClient.Containers.createContainerSync(新的CreateContainerParameters
{
Image=$“{Image}:{tag}”,
ExposedPorts=新字典
{
{
containerPort,默认值(EmptyStruct)
}
},
HostConfig=newhostconfig
{
PortBindings=新字典
{
{containerPort,新列表{newportbinding{HostPort=HostPort}}
},
PublishAllPorts=false
},
Env=环境变量
});
wait\u dockerClient.Containers.StartContainerAsync(response.ID,null);
返回response.ID;
}
公共异步任务StopContainerAsync(字符串containerId)
{
if(containerId!=null)
{
wait_dockerClient.Containers.KillContainerAsync(containerId,new ContainerKillParameters());
}
}
}
然后我在测试中使用此代码,如下所示:
MyTests.cs
公共类MyTests
:IClassFixture
{
私人住宅