Docker 中的 Docker | Github 操作 - 自托管运行器

Posted

技术标签:

【中文标题】Docker 中的 Docker | Github 操作 - 自托管运行器【英文标题】:Docker in Docker | Github actions - Self Hosted Runner 【发布时间】:2021-11-17 17:09:04 【问题描述】:

我正在尝试为 Kubernetes 上的 Github 操作创建一个自托管运行器。第一步是尝试使用 docker 文件,如下所示:

FROM ubuntu:18.04

# set the github runner version
ARG RUNNER_VERSION="2.283.1"

# update the base packages and add a non-sudo user
RUN apt-get update -y && apt-get upgrade -y && useradd -m docker
RUN useradd -r -g docker nonroot
# install python and the packages the your code depends on along with jq so we can parse JSON
# add additional packages as necessary
RUN apt-get install -y curl jq build-essential libssl-dev apt-transport-https ca-certificates curl software-properties-common

# install docker
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \
    && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" \
    && apt update \
    && apt-cache policy docker-ce \
    && apt install docker-ce -y

ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/$TINI_VERSION/tini /tini
RUN chmod +x /tini
RUN usermod -aG docker nonroot
USER nonroot
# set the entrypoint to the start.sh script
ENTRYPOINT ["/tini", "--"]
CMD ["/bin/bash"]

构建完成后,我使用以下命令运行容器:

 docker run -v /var/run/docker.sock:/var/run/docker.sock -it srunner

当我尝试拉取图像时,出现以下错误:

nonroot@0be0cdccb29b:/$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
nonroot@0be0cdccb29b:/$

请告知是否有可能在 docker 容器中以非 root 身份运行 docker。

【问题讨论】:

这是在 Kubernetes 上,所以我不确定,但我在 Azure DevOps selft 托管代理和these steps solved the issue上的 VM 上也遇到过类似情况@ 它在 Compute Engine(GCP 上的 VM)上对我很有用 @KrzysztofMadej。但我想把它带到 Kubernetes 你试过了吗? techoverflow.net/2017/03/01/… 是的,我试过了 【参考方案1】:

除了使用套接字之外,还有一种方法可以通过 TCP 从容器中的 docker 连接到外部 docker。

Linux 示例:

运行ifconfig,它将打印您在主机节点上安装docker时创建的docker网络接口。它通常命名为docker0,记下该接口的IP地址。

现在,修改 /etc/docker/daemon.json 并将 thistcp://IP:2375 添加到 hosts 部分。重启docker服务。

使用额外选项运行容器:--add-host=host.docker.internal:host-gateway

在任何此类容器内,地址 tcp://host.docker.internal:2375 现在指向外部 docker 引擎。

【讨论】:

感谢 SD,但计划与 Kubernetes 部署一样运行。在这种情况下,可能无法即时修改设置【参考方案2】:

尝试按照here 的建议将您的用户名添加到 docker 组。 此外,您应该检查您的内核compatibility。

【讨论】:

会检查同样的 @WytrzymałyWiktor 是的,我使用 DIND 容器来实现相同的目标,并且能够在 Kubernetes 中使用 Github 托管的运行器。供您参考的链接。 https://sanderknape.com/2020/03/self-hosted-github-actions-runner-kubernetes/https://github.com/sokube/github-k8s-runner

以上是关于Docker 中的 Docker | Github 操作 - 自托管运行器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 yml 文件中的 Github Action 中部署 docker 容器?

将私有 github 存储库设置为 docker 中 package.json 中的依赖项在 github 操作中生成失败

GitHub+Docker 亚博体育自动构建镜像

在 GitHub Actions 中使用 docker 文件

GitHub Actions 上 Windows 环境中的测试容器:“找不到有效的 Docker 环境。请查看日志并检查配置”

无法连接到 Scala 测试中的 Cassandra docker 容器