GitLab 容器注册表部署令牌在最新的官方 Ubuntu 18.04 x86 AMI(ami-085925f297f89fce1
)在EC2实例上运行,但它们在其他Ubuntu 18.04环境中,以及在具有相同安全组设置的其他AMI上都可以工作。我尝试了多个令牌和多个实例,试图排除用户错误。
我想知道这个问题是否会在其他人身上重现,如果是,是什么原因导致的。最有可能的解释是一个bug,但也可能是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
以下是一些部署令牌工作正常的情况。
在Ubuntu和Amazon Linux环境中,Docker版本是19.03.6。
为了彻底排除安全组的问题,我简单地尝试了一个大范围开放的安全组(CIDR的所有入口和出口端口都是开放的)。0.0.0.0/0
)的Ubuntu EC2实例。这没有任何影响。
在每种情况下(除了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
因为它将你的凭证写入一个纯文本系统文件。据推测,你不需要 sudo
在Mac上,因为Docker Desktop做了一些更聪明的事情,而不是将证书存储在明文中。
在Amazon Linux上,你可以不使用sudo进行身份验证,但它并不稳定:当你去拉一个私有的repo时,你得到的是 access denied
就像你从未登录过一样。在Ubuntu上,它只是以一个神秘的错误中止。可以说,后者更好,但这两种结果都有不足之处。
为什么在MacOS内部运行的Ubuntu容器上能成功呢?因为当你运行 docker run -it ubuntu /bin/bash
你会被塞进一个根壳里。你所做的一切 sudo
.