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

ECS特权容器非root用户执行Docker命令遇权限拒绝求助

问题描述

本地使用自定义镜像以runner非root用户启动容器时,可正常执行Docker命令;但在ECS任务中指定user = "runner"运行时,提示权限不足,取消用户指定后命令可正常执行。

相关配置

Dockerfile内容:

RUN groupadd "runner" && useradd -g "runner" --shell /bin/bash "runner" \
    && mkdir -p "/home/runner" \
    && chown -R "runner":"runner" "/home/runner"
RUN usermod -aG docker "runner"

WORKDIR /home/runner
USER runner

本地测试成功场景:

❯ docker run --user runner -ti -v /var/run/docker.sock:/var/run/docker.sock github-runner-entrypoint:0.8 /bin/bash
runner@62514eaea867:~$ /usr/bin/docker version --format '{{.Server.APIVersion}}'
1.41
runner@62514eaea867:~$

ECS任务失败配置(Terraform容器定义):

user = "runner"

entrypoint = ["/bin/bash", "-c"]
command = ["/bin/mount && /bin/docker run debian:latest /bin/ls"] 

排查与解决方案

核心原因

ECS宿主机上/var/run/docker.sock的所属用户组ID,和容器内docker用户组的ID不匹配,导致容器内的runner用户没有权限访问Docker套接字。本地环境中宿主机与容器的docker组ID一致,所以runner加入该组后能正常访问;但ECS宿主机的docker组ID通常与本地不同,容器内runner对应的组ID无访问权限。

解决步骤

  1. 确认ECS宿主机docker组ID
    登录ECS宿主机执行以下命令,获取docker组的GID:

    getent group docker | cut -d: -f3
    
  2. 修改Dockerfile对齐组ID
    在Dockerfile中创建docker组时指定与ECS宿主机一致的GID(假设获取到的GID为999):

    RUN groupadd "runner" && useradd -g "runner" --shell /bin/bash "runner" \
        && mkdir -p "/home/runner" \
        && chown -R "runner":"runner" "/home/runner"
    # 用ECS宿主机的docker组ID创建组
    RUN groupadd -g 999 docker && usermod -aG docker "runner"
    
    WORKDIR /home/runner
    USER runner
    

    重新构建镜像并部署到ECS即可解决权限问题。

  3. 动态适配组ID(无需修改镜像)
    如果无法重新构建镜像,可在ECS任务命令中添加动态调整组ID的逻辑:

    entrypoint = ["/bin/bash", "-c"]
    command = ["getent group docker || groupadd -g $(stat -c '%g' /var/run/docker.sock) docker; usermod -aG docker runner; /bin/mount && /bin/docker run debian:latest /bin/ls"]
    

    该命令会先检查容器内是否存在对应GID的docker组,不存在则根据docker.sock的组ID创建,再将runner加入组,最后执行原业务命令。

  4. 权限验证方法
    可在ECS任务中先执行以下命令,确认权限匹配情况:

    ls -l /var/run/docker.sock && id runner
    

    检查输出中docker.sock的组ID是否包含在runner用户的组列表中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:55:26