连接到docker build中的dotnet.testcontainer失败,并显示消息“无法分配请求的地址/var/run/docker.sock”

问题描述

我有一些C#集成测试,它们启动了MySql docker容器,构建了一个架构,与其进行交互,然后拆除了该容器。当我运行dotnet test时,它工作正常,但是当我尝试将其作为Cannot assign requested address /var/run/docker.sock命令的一部分运行时,却无法运行docker build

TestContainer设置:

        var testcontainerBuilder = new TestcontainersBuilder<MySqlTestcontainer>()
            .WithDatabase(new MySqlTestcontainerConfiguration()
            {
                Database = MYSQL_DBNAME,Username = MYSQL_USER,Password = password,Port = MYSQL_PORT
            })
            .WithEnvironment("MYSQL_ROOT_HOST","%")
            .WithOutputConsumer(_outputConsumer)
            .WithCleanUp(true);
        _container = testcontainerBuilder.Build();
        await _container.StartAsync();

我检查过的东西

  • 端口可用
  • _container.ConnectionStringlocalhost。我怀疑这是相关的。

我怀疑docker构建环境在localhost上看不到MySql容器。

解决方法

我想到的解决方案是将docker build分为两个步骤。一种用于测试,另一种用于打包构建。然后,我在文件/var/run/docker.sock上运行内置的测试容器

Dockerfile.test:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS test
WORKDIR /src/
RUN PATH="$PATH:/root/.dotnet/tools" dotnet tool install -g dotnet-format --version 4.0.130203
COPY . /src/
RUN dotnet restore && \
    PATH="$PATH:/root/.dotnet/tools" dotnet format --check --verbosity diagnostic

ENTRYPOINT ["dotnet","test","--logger:trx"]

命令:

docker build --build-arg -t test:1 -f ./Dockerfile.test  .
docker run -v /var/run/docker.sock:/var/run/docker.sock test:1

受此职位启发: What is the result of mounting `/var/run/docker.sock` in a Docker in Docker scenario?

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...