使用GitHub Actions自托管Runner登录AWS ECR失败求助
问题原因与解决步骤
核心问题
你遇到的permission denied while trying to connect to the Docker daemon socket错误,本质是自托管Runner的运行用户没有访问Docker套接字的权限。GitHub托管Runner是官方预配置好环境的,默认已经把运行用户加入了docker用户组,但你自己在EC2上搭建的自托管Runner需要手动配置这一步。
解决步骤
- 登录到你的EC2实例(也就是自托管Runner所在的服务器)
- 将Runner运行用户加入docker用户组
假设你是用ubuntu用户部署的自托管Runner,执行以下命令:
如果你的Runner用的是其他用户,把sudo usermod -aG docker ubuntuubuntu替换成对应的用户名即可。 - 让权限生效
可以重启Docker服务和GitHub Runner服务,确保组权限变更生效:
或者也可以让该用户重新登录(退出当前SSH会话再重新连接),再重启Runner服务。sudo systemctl restart docker sudo systemctl restart actions.runner.<你的Runner名称> # 替换成实际的Runner服务名 - 验证权限配置
执行以下命令检查Docker套接字的权限:
正常输出应该类似:ls -l /var/run/docker.sock
这说明套接字属于srw-rw---- 1 root docker 0 月 日 时:分 /var/run/docker.sockdocker组,只要你的Runner用户在这个组里,就能正常访问。
额外说明
- 那个
WARNING! Using --password via the CLI is insecure只是一个警告,不是导致失败的原因,解决权限问题后这个警告可能依然存在,但不会影响ECR登录和后续部署流程。 - 不要在工作流的
docker run等命令前加sudo,因为我们已经让Runner用户拥有了Docker操作权限,使用sudo反而可能引发其他权限问题。
内容的提问来源于stack exchange,提问作者azhar
相关产品推荐
相关产品推荐

