GitLab 部署令牌在 EC2 Ubuntu 18.04 AMI 上失败,其他任何地方都失败
GitLab deploy token fails on EC2 Ubuntu 18.04 AMI, and nowhere else
GitLab 容器注册表部署令牌似乎不适用于 EC2 实例上的最新官方 Ubuntu 18.04 x86 AMI (ami-085925f297f89fce1
) 运行,但它们确实适用其他 Ubuntu 18.04 环境,以及具有相同安全组设置的其他 AMI。我尝试了多个令牌和多个实例来尝试排除用户错误。
我想知道这个问题是否会在其他人身上重现,如果是,是什么原因造成的。最可能的解释是错误,但也可能是 Ubuntu 的一些我不明白的安全功能。错误是这样的:
> sudo apt update
> sudo apt install -y docker.io
> docker login -u <the_username> -p <the_token> registry.gitlab.com
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/auth: dial unix /var/run/docker.sock: connect: permission denied
以下是部署令牌运行良好的一些情况:
- 在我的 Mac 上,即 运行 Docker 19.03.8
- 在Ubuntu 18.04 Docker容器运行里面说Mac
- 在 Amazon Linux 相同类型的 EC2 实例上,运行 在具有相同安全组的相同子网中
在 Ubuntu 和 Amazon Linux 环境中,Docker 版本为 19.03.6。
为了完全排除安全组问题,我简要地为 Ubuntu EC2 实例尝试了一个完全开放的安全组(所有端口都为 CIDR 0.0.0.0/0
的入口和出口打开)。没有效果。
在每种情况下(Mac 终端除外),这些都是完全干净的石板:我所做的唯一事情就是更新 OS(sudo apt update
或 sudo yum update
,安装 Docker,然后尝试使用 docker login -u <the_username> -p <the_token> registry.gitlab.com
.
进行身份验证
除了 Ubuntu 18.04 EC2 实例,我很快就得到了 Login Succeeded
。但是,对于 Ubuntu EC2 实例,我遇到了上述错误。
是否为他人复制?可能是什么原因造成的?
答案通常是 sudo
。
在 Linux 上,您需要将 sudo
与 docker login
一起使用,因为它会将您的凭据写入纯文本系统文件。据推测,您不需要 Mac 上的 sudo
,因为 Docker Desktop 做的事情比以明文形式存储凭据更聪明。
在 Amazon Linux 上,您可以在没有 sudo 的情况下进行身份验证,但它不会坚持:当您去拉一个私人仓库时,您会 access denied
就像您从未登录过一样. 在 Ubuntu 上,它只是因一个神秘错误而中止。可以说,后者更好,但两种结果都有不足之处。
为什么它在 MacOS 内的 Ubuntu 容器 运行ning 上工作?因为当你 运行 docker run -it ubuntu /bin/bash
时,你被插入到根 shell 中。你所做的一切都是 sudo
.
GitLab 容器注册表部署令牌似乎不适用于 EC2 实例上的最新官方 Ubuntu 18.04 x86 AMI (ami-085925f297f89fce1
) 运行,但它们确实适用其他 Ubuntu 18.04 环境,以及具有相同安全组设置的其他 AMI。我尝试了多个令牌和多个实例来尝试排除用户错误。
我想知道这个问题是否会在其他人身上重现,如果是,是什么原因造成的。最可能的解释是错误,但也可能是 Ubuntu 的一些我不明白的安全功能。错误是这样的:
> sudo apt update
> sudo apt install -y docker.io
> docker login -u <the_username> -p <the_token> registry.gitlab.com
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/auth: dial unix /var/run/docker.sock: connect: permission denied
以下是部署令牌运行良好的一些情况:
- 在我的 Mac 上,即 运行 Docker 19.03.8
- 在Ubuntu 18.04 Docker容器运行里面说Mac
- 在 Amazon Linux 相同类型的 EC2 实例上,运行 在具有相同安全组的相同子网中
在 Ubuntu 和 Amazon Linux 环境中,Docker 版本为 19.03.6。
为了完全排除安全组问题,我简要地为 Ubuntu EC2 实例尝试了一个完全开放的安全组(所有端口都为 CIDR 0.0.0.0/0
的入口和出口打开)。没有效果。
在每种情况下(Mac 终端除外),这些都是完全干净的石板:我所做的唯一事情就是更新 OS(sudo apt update
或 sudo yum update
,安装 Docker,然后尝试使用 docker login -u <the_username> -p <the_token> registry.gitlab.com
.
除了 Ubuntu 18.04 EC2 实例,我很快就得到了 Login Succeeded
。但是,对于 Ubuntu EC2 实例,我遇到了上述错误。
是否为他人复制?可能是什么原因造成的?
答案通常是 sudo
。
在 Linux 上,您需要将 sudo
与 docker login
一起使用,因为它会将您的凭据写入纯文本系统文件。据推测,您不需要 Mac 上的 sudo
,因为 Docker Desktop 做的事情比以明文形式存储凭据更聪明。
在 Amazon Linux 上,您可以在没有 sudo 的情况下进行身份验证,但它不会坚持:当您去拉一个私人仓库时,您会 access denied
就像您从未登录过一样. 在 Ubuntu 上,它只是因一个神秘错误而中止。可以说,后者更好,但两种结果都有不足之处。
为什么它在 MacOS 内的 Ubuntu 容器 运行ning 上工作?因为当你 运行 docker run -it ubuntu /bin/bash
时,你被插入到根 shell 中。你所做的一切都是 sudo
.