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

kx1ctssn  于 2023-02-07  发布在  Docker
关注(0)|答案(1)|浏览(131)

我有一些C#集成测试,这些测试启动MySql Docker容器,构建架构,与它交互,然后拆除容器。当我运行dotnet test时,它工作正常,但当我尝试将它作为docker build命令的一部分运行时,Cannot assign requested address /var/run/docker.sock失败。
测试容器设置:

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容器。

hmae6n7t

hmae6n7t1#

我提出的解决方案是将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?

相关问题