0

我正在尝试从装有 docker.sock 的计数器内部启动同级容器。容器可以毫无问题地启动简单的同级容器,但是在使用 docker-compose 脚本时,它会失败并显示:

=> [internal] load build definition from demo.dockerfile                                                       0.1s
 => => transferring dockerfile: 2B                                                                              0.0s
 => [internal] load .dockerignore                                                                               0.1s
 => => transferring context: 35B                                                                                0.0s
failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount3865249966/demo.dockerfile: no such file or directory

demo.dockerfile 是我试图从中构建图像的 dockerfile,从 docker-compose 文件中引用。

有没有人使用过 docker-compose 和 buildkit 和安装的 docker.sock ?

就像查找 dockerfile 的路径变得混乱一样。

4

1 回答 1

0

好的,这就是发生的事情:

我们的 docker-compose 文件中的卷挂载路径损坏了,因为它们在作业运行器内部扩展为绝对路径,但在主机外部运行。我们不能仅仅通过硬编码路径来修复它,因为每个人的机器和 CI 都是不同的。

作为一种解决方法,当我们像这样启动它时,我们将基本路径又名工作目录作为环境变量传递给作业运行器:

docker run -e HOST_MACHINE_PWD=$(pwd) -v /var/run/docker.sock:/var/run/docker.sock job-runner

然后我们在生成 docker-compose 文件并将其用作安装这些卷的基本路径的脚本中读取它。
事实上,我们已经动态生成了 docker-compose 配置,这使得它更容易,如果您使用的是静态配置,您可能需要尝试使用sed或其他方式覆盖 docker-compose 路径。

这是我们写的博客文章,解释了这个修复和我们的设置,并为其他试图做这样的事情的人提供了源代码链接:https ://www.lunasec.io/docs/blog/lunasec-ci/#how-一起使用-dockersock-and-docker-compose-together

于 2021-11-03T22:52:55.280 回答