极狐GitLab 正式推出面向 GitLab 老旧版本(12.x、13.x、14.x、15.x 等)免费用户的专业升级服务,点击查看详情

返回列表 发布新帖

安装GitLab runner docker executor报错

842 6
发表于 2024-4-9 15:35:51 | 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
安装GitLab runner docker executor,遇到错误 Cannot connect to the Docker daemon,
请问怎么解决?
回复

使用道具 举报

评论6

phuLv.2 发表于 2024-4-10 13:31:11 | 显示全部楼层
这个错误经常发生在 docker in docker 的使用场景下,通常是没有开启 runner 的 privileged 特权模式引起的;
否则,请对照官方文档检查自己的安装过程是否有误
回复

使用道具 举报

fanruiLv.2 发表于 2024-4-24 21:41:06 | 显示全部楼层
1. docker 是否正常启动
2. docker 有没有配置环境变量
3. gitlab-runner 里的privileged 改为true试试
4. 执行下面命令,让gitlab-runner 以root身份运行试试
sudo gitlab-runner uninstall
sudo  gitlab-runner install --working-directory /home/gitlab-runner --user root
回复

使用道具 举报

小马哥Lv.8 发表于 2024-4-24 22:01:26 | 显示全部楼层

[quote][size=2][color=#999999]fanrui 发表于 2024-4-24 21:41[/color][/size]

  1. docker 是否正常启动
  2. docker 有没有配置环境变量
  3. gitlab-runner 里的privileged 改为true试试 [/quote]

需要把宿主机的 /var/run/docker.sock 文件挂载到docker 容器中(你的 runner 是用 docker 运行的)

正常的 config.toml 文件应该有如下代码:

[runners.docker]
    privileged = true
    volumes = ["/cache","/var/lib/docker","/var/run/docker.sock:/var/run/docker.sock"]
开心交流,交流开心。
回复

使用道具 举报

fanruiLv.2 发表于 2024-4-24 22:05:15 | 显示全部楼层
小马哥 发表于 2024-4-24 22:01
需要把宿主机的 /var/run/docker.sock 文件挂载到docker 容器中(你的 runner 是用 docker 运行的)

正 ...

我有的机器需要挂载,有的不需要,也不知道是为什么?
徐晓伟 讲过,但没有完全听懂
回复

使用道具 举报

wangkaixuanLv.7 发表于 2024-4-29 09:36:13 | 显示全部楼层
可以参考这个文档 https://docs.gitlab.com/ee/ci/do ... se-docker-in-docker

我理解runner侧的配置应该是ok的,还需要在ci文件中配置的
回复

使用道具 举报

永胜Lv.1 发表于 2024-4-29 10:02:19 | 显示全部楼层

我不建议用docker executor,主要是里面的逻辑太复杂,限制太多,建议还是用shell executor,也可以支持docker的全部功能,实现方式如下:

1). 需要基于gitlab-runner镜像制作带docker工具和其他工具的镜像

FROM gitlab/gitlab-runner:ubuntu

ARG DEBIAN_FRONTEND=noninteractive

ENV TZ=Asia/Shanghai
RUN set -eux;\
    apt update && \
    apt install -y --no-install-recommends \
        apt-transport-https ca-certificates\
        procps \
        curl wget \
        xz-utils\
        file \
        git vim fzf build-essential && \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &&\
    echo $TZ > /etc/timezone && \
    apt install -y --no-install-recommends tzdata && \
    dpkg-reconfigure --frontend noninteractive tzdata

# Add locales
RUN set -o errexit -o nounset \
  && apt update -y && apt install -y locales \
  && locale-gen en_GB.UTF-8 \
  && echo 'LANG=en_GB.UTF-8' > /etc/locale.conf \
  && echo 'LC_ALL=en_GB.UTF-8' >> /etc/locale.conf \
  && echo 'LANGUAGE=en_GB:en' >> /etc/locale.conf 

ENV LANG=en_GB.UTF-8
ENV LANGUAGE=en_GB.UTF-8
ENV LC_ALL=en_GB.UTF-8

RUN \
  set -xe \
  && apt install -y --no-install-recommends \
    # net tool
    gnupg tcpdump net-tools inetutils-ping telnet \
    strace lsof htop iptraf sysstat bind9-utils iproute2 \
    ca-certificates wget curl iptables \
    # build tool
    unzip zip python3-pip bzip2 git vim jq

# tools
COPY --from=mikefarah/yq /usr/bin/yq /usr/bin/yq

# docker
COPY --from=seanly/toolset:docker \
      /install/docker/usr/bin/* \
    /usr/bin/

# docker plugins
COPY --from=seanly/toolset:docker \
      /root/.docker/ \
    /root/.docker/

# kubernetes
COPY --from=seanly/toolset:helm /usr/bin/helm /usr/bin/helm
COPY --from=seanly/toolset:kustomize /usr/bin/kustomize /usr/bin/kustomize
COPY --from=seanly/toolset:kubectl /usr/bin/kubectl /usr/bin/kubectl

CMD ["run", "--user=root", "--working-directory=/home/gitlab-runner"]

2). 构建镜像

3). 使用docker-compose 启动gitlab-runner,注意这里启动两个服务,另外一个是dind,下面是参考的docker-compose文件

version: '3'
services:
  gitlab-runner:
    image: seanly/appset:gitlab-runner-1
    container_name: gitlab-runner
    restart: always
    volumes:
      - docker-certs:/certs/client:ro
      - runner-workspace:/data/workspace:rw
    environment:
      DOCKER_HOST: tcp://runner-docker:2376
      DOCKER_CERT_PATH: /certs/client
      DOCKER_TLS_VERIFY: 1
      RUNNER_NAME: ${RUNNER_NAME}
      REGISTER_NON_INTERACTIVE: true
      CI_SERVER_URL: ${CI_SERVER_URL}
      REGISTRATION_TOKEN: ${REGISTRATION_TOKEN}
      RUNNER_TAG_LIST: "docker,default,dind"
      REGISTER_RUN_UNTAGGED: true
      REGISTER_LOCKED: true
      RUNNER_EXECUTOR: shell
      CI_SERVER_TOKEN: ${CI_SERVER_TOKEN}
      RUNNER_BUILDS_DIR: /data/workspace/builds
      RUNNER_CACHE_DIR: /data/workspace/cache
    labels:
      - traefik.enable=false

  runner-docker:
    image: docker:dind
    restart: unless-stopped
    container_name: runner-docker
    command: --storage-driver=overlay2
    environment:
      - DOCKER_TLS_CERTDIR=/certs
      - DOCKER_TLS_SAN=DNS:runner-docker
    privileged: true
    volumes:
      - docker-certs:/certs/client
      - runner-workspace:/data/workspace:rw
    labels:
      - traefik.enable=false

volumes:
    docker-certs:
    runner-workspace:

networks:
  default:
    name: opsbox-network
    external: true

通过这种方式gitlab-runner里面的docker链接的是另外容器的dockerd服务。

回复

使用道具 举报

意见建议

Email:forum@gitlab.cn
  • 关注公众号
  • 添加专业顾问
Copyright © 2001-2024 极狐GitLab论坛 版权所有 All Rights Reserved. 鄂ICP备2021008419号-1|鄂公网安备42018502006137号
关灯 快速发帖
扫一扫添加专业顾问
返回顶部
快速回复 返回顶部 返回列表