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 在
- 运行在所述Mac内部的Ubuntu 18.04 Docker容器上
- 在相同类型的 Amazon Linux EC2 实例上,在具有相同安全组的同一子网中运行
在 Ubuntu 和 Amazon Linux 环境中,Docker 版本是 19.03.6。
为了完全排除安全组问题,我简要地尝试了 Ubuntu EC2 实例的宽开放安全组(CIDR0.0.0.0/0
的所有端口都打开入口和出口(。它没有效果。
在每种情况下(Mac 终端除外(,这些都是完全干净的石板:我唯一做的事情是更新操作系统(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容器上运行?因为当你运行docker run -it ubuntu /bin/bash
时,你会被扔进一个根壳里。你所做的一切都是sudo
.