问题描述
我有一些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.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
受此职位启发: What is the result of mounting `/var/run/docker.sock` in a Docker in Docker scenario?