在自定义的GitHub Action中运行docker-in-docker容器并挂载文件夹

3

我在GitHub action中运行一个docker-in-docker容器,需要挂载来自主机(仓库)的文件夹。

action.yml

...
runs:
  using: 'docker'
  image: 'Dockerfile'
...

Dockerfile
FROM docker:stable
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh

...
docker run -d ... -v /github/workspace/.github/config:/opt/dest/config ...
...

entrypoint.sh中的调试打印中可以看到文件实际上存在于GITHUB_WORKSPACE文件夹中。但似乎这些文件没有正确地挂载到内部容器中。


如果有帮助的话,请参考此链接 - https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/套接字解决方案可能会解决您的问题。您还可以查看 --privileged 标志。有关更多详细信息,请参见此处 - https://www.docker.com/blog/docker-can-now-run-within-docker/ - Sourabh Bhagat
尝试挂载套接字和特权标志,但没有帮助。 - reugn
1个回答

0

使用官方 docker dind setup 时,它有两个组件:一个带有 Docker CLI 的容器(docker:latest)和另一个带有 Docker Daemon 的容器(docker:dind)。Docker-in-Docker 容器是在后者容器(docker:dind)内创建的,因此应该在该容器上设置主机挂载。我怀疑您可能正在将挂载设置到 Docker CLI 容器中。

另一个建议:默认的 Docker-in-Docker 设置依赖于非特权容器或与主机的 Docker 套接字连接;这两种方法都提供了较弱的隔离性,并可能破坏您的主机设置。为了获得适当的隔离性,请查看 Sysbox,这是一个新的 runc,可以让您更加清洁地运行 Docker-in-Docker(以及其他内容)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接