在 docker 构建中连接到 dotnet.testcontainer 失败并显示消息 "Cannot assign requested address /var/run/docker.sock"
Connecting to dotnet.testcontainer within docker build fails with messae "Cannot assign requested address /var/run/docker.sock"
我有一些 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.ConnectionString
是 localhost
。我怀疑这是相关的。
我怀疑 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
受此启发post:
我有一些 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.ConnectionString
是localhost
。我怀疑这是相关的。
我怀疑 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
受此启发post: