使用包 testcontainer 在 gitlab CICD 管道内运行 dotnet test 时,容器已启动,但出现此错误:
Error Message:
Docker.DotNet.DockerApiException : Docker API responded with status code=Conflict, response={"message":"Container 3371da42d9447805eb7d5d7ef2da7b5c8395b5c333e181d4add422205256e49a is not running"}
我在管道中使用 docker 套接字绑定而不是 docker dind,因为文档使用 docker dind 我现在想知道它是否也应该与 docker 套接字绑定一起使用。
我现在想如果 testcontainer 使用 gitlab runner docker,它们应该并行安装,并且可能无法从作业容器内部访问。
当您使用 docker:dind 服务运行 GitLab 管道时,每个作业都会获得自己的、独立的 docker 实例,可以在其中进行构建,如果有,则在其中创建自己的私有容器。
绑定安装
/var/run/docker.sock
意味着所有gitlab作业,特别是如果您有多个运行程序或并发> 1,在主机上共享相同的docker环境,如果它们尝试创建命名对象,它们很容易发生冲突。明显的优点是它们共享构建缓存,因此这种方法可能会产生更好的构建时间。
如果您可以保证只有一个运行程序并且并发度为 1,那么应该安全地执行
docker container prune -f
作为清理先前作业运行中留下的任何延迟容器的 before_script
步骤。
但是,在这种情况下,即使您的其他作业使用共享套接字,对于 testcontainers 作业来说,显式使用 docker:dind 作为服务似乎可能会更好。要么在 config.toml 中声明两个运行器,一个用于执行“docker”标记,另一个用于执行“docker:dind”标记,并根据需要进行设置。或者只需像平常一样设置一个运行器并启用特权模式,然后为每个需要它的作业声明一个 docker:dind 服务。