我正试图从一个装有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
演示。dockerfile是我试图构建镜像的dockerfile,从docker-compose文件中引用。
是否有人使用docker-compose与buildkit和挂载的docker。袜子吗?
就像找到dockerfile的路径被弄乱了。
好的,是这样的:
卷挂载路径在我们的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-to-use-dockersock-and-docker-compose-together