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

Docker Compose非Root用户使用/run/host-services ssh-agent sock权限问题

永久解决容器内非root用户访问SSH_AUTH_SOCK权限问题

之前通过挂载/run/host-services/ssh-auth.sock实现容器使用本地SSH密钥访问Git仓库,但切换非root用户镜像后,套接字始终属于root用户,导致权限不足。每次手动执行docker exec -u root app_name sh -c "chmod o+rw /var/run/host-services/ssh-auth.sock"太繁琐,以下是几个永久解决办法:

方案1:Docker Desktop内置配置调整(适用于Docker Desktop用户)

Docker Desktop的host-services是内部虚拟路径,直接通过设置调整SSH代理权限:

  • 打开Docker Desktop设置 → Resources → SSH
  • 勾选"Allow containers to access local SSH agent",在权限设置里将套接字权限调整为允许容器用户所在组访问,或者直接开放其他用户读写权限(按需选择)
  • 重启Docker Desktop,挂载的套接字会自动应用新权限,非root用户可直接访问

方案2:Entrypoint脚本自动修正权限

给镜像添加启动脚本,容器启动时自动处理权限:

  1. 项目内创建entrypoint.sh脚本:
#!/bin/sh
if [ -S "$SSH_AUTH_SOCK" ]; then
    # 给套接字添加其他用户读写权限,也可以换成更安全的组权限调整
    chmod o+rw "$SSH_AUTH_SOCK"
    # 可选:如果镜像支持usermod,把当前用户加入root组(更安全)
    # usermod -aG root $(whoami)
fi
# 执行容器原本的启动命令
exec "$@"
  1. 在Dockerfile中添加脚本配置:
COPY entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
# 保留原镜像的启动命令
CMD ["your-original-start-command"]
  1. 重新构建镜像并启动容器,脚本会自动在启动时修正权限

方案3:将容器用户加入root组

利用group_add配置让容器用户获得root组权限,从而访问root属主的套接字:
修改docker-compose.yml:

services:
  app:
    ...
    environment:
      SSH_AUTH_SOCK: /run/host-services/ssh-auth.sock
    volumes:
      - /run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock
    user: ${USER_ID}:${GROUP_ID}
    group_add:
      - root  # 把容器用户加入root组,继承组读写权限

相比直接开放其他用户权限,这种方式更安全,仅让指定容器用户获得访问权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:03:16