You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2环境下Jenkins容器内执行Docker命令提示Permission denied问题求助

解决方案

问题根因

你遇到的docker: Permission denied报错核心来自两个WSL2环境特有的权限问题:

  • 直接挂载Windows路径下的docker配置、以及WSL2宿主机的docker二进制到容器内,drvfs(WSL跨Windows文件系统挂载)的默认权限限制导致容器内用户没有二进制执行权限
  • 配置中group_add指定的GID 1000和WSL2宿主机docker组的实际GID不匹配,导致容器内用户无法读写/var/run/docker.sock

推荐修复方案(两种可选,优先选第二种)

方案1:基于sock挂载的修复

  • 第一步:在WSL2 Debian终端执行命令获取docker组GID:
    getent group docker | awk -F: '{print $3}'
    记录返回的数值,示例返回值为998。
  • 第二步:修改docker-compose.yml配置:
version:             '2.4'
services:
  jenkins:
    # 后续替换为自定义镜像名
    image:           jenkins/jenkins
    user:            root
    privileged:      true
    container_name:  jenkins
    restart:         unless-stopped
    ports:
      - 8080:8080
      - 8443:8443
      - 50000:50000
    group_add:
      # 替换为上一步查询到的实际docker组GID
      - 998
    volumes:
      - jenkins_home:/var/jenkins_home
      # 替换为WSL2 Debian内的.docker配置路径,不要使用/c/Users开头的Windows路径
      - /root/.docker/config.json:/root/.docker/config.json:ro 
      - /root/.docker/machine/certs:/root/.docker:ro
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - JENKINS_OPTS="--prefix=/jenkins"
volumes:
  jenkins_home:
  • 第三步:构建带docker客户端的自定义Jenkins镜像
    在docker-compose.yml同目录创建Dockerfile,内容如下:
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get install -y ca-certificates curl gnupg lsb-release && \
    mkdir -m 0755 -p /etc/apt/keyrings && \
    curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
    apt-get update && apt-get install -y docker-ce-cli && \
    rm -rf /var/lib/apt/lists/*
# 若保持root用户启动可删除下行
USER jenkins

执行docker-compose build构建镜像后再启动容器即可。

方案2:基于TCP端口暴露的修复(WSL2+Docker Desktop下更省心,无权限问题)

  • 第一步:打开Docker Desktop设置,在General选项卡勾选「Expose daemon on tcp://localhost:2375 without TLS」,点击Apply & Restart生效。
  • 第二步:修改docker-compose.yml配置如下,无需挂载sock、docker二进制、docker配置:
version:             '2.4'
services:
  jenkins:
    image:           jenkins/jenkins
    user:            root
    privileged:      true
    container_name:  jenkins
    restart:         unless-stopped
    ports:
      - 8080:8080
      - 8443:8443
      - 50000:50000
    volumes:
      - jenkins_home:/var/jenkins_home
    environment:
      - JENKINS_OPTS="--prefix=/jenkins"
      # 新增环境变量指向宿主机Docker Daemon
      - DOCKER_HOST=tcp://host.docker.internal:2375
volumes:
  jenkins_home:
  • 第三步:同方案1的第三步,给Jenkins镜像内置docker客户端,或者进入容器后手动安装docker-cli即可正常执行docker命令。

临时验证方法

如果要快速验证逻辑是否生效,可以在WSL2宿主机执行sudo chmod 666 /var/run/docker.sock临时放开sock权限,进入容器测试docker命令是否正常执行,确认没问题后再换回权限控制的方案。

内容的提问来源于stack exchange,提问作者Loandoer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:36:01