6

这是关于 Google Container VM Image(beta) https://cloud.google.com/compute/docs/containers/vm-image/的问题

我登录了一个由 Container VM 映像制作的实例。并运行:

sudo /usr/share/google/dockercfg_update.sh

上面的脚本docker login对私有容器注册表起作用。

它会导致错误:

/usr/share/google/dockercfg_update.sh: 27: cannot create /root/.dockercfg: Read-only file system

/root目录在 container-vm 中似乎是只读的。 我怎样才能docker login通过root用户?

4

2 回答 2

5

由于 /root 是只读的,因此您的凭据无法存储在那里。您可以将非 root 用户添加到“docker”组并/usr/share/google/dockercfg_update.shdocker login该用户身份运行。

来自https://cloud.google.com/compute/docs/containers/vm-image/#accessing_private_google_container_registry

$ sudo usermod -a -G docker ${USER}
$ exec sudo su ${USER}
$ /usr/share/google/dockercfg_update.sh
$ docker pull gcr.io/YOUR_PROJECT/YOUR_IMAGE

如何通过 root 用户“docker login”

如果你必须调用docker login/usr/share/google/dockercfg_update.sh作为用户(不推荐),一个hacky方法是给你的命令root添加前缀。HOME=/home/chronos/前任:

# as 'root' user
$ HOME=/home/chronos/ /usr/share/google/dockercfg_update.sh
$ HOME=/home/chronos/ docker pull gcr.io/YOUR_PROJECT/YOUR_IMAGE
于 2016-07-22T17:50:10.313 回答
1

/root是只读的,因此您无法运行 docker 命令,因为您无法存储任何身份验证方法生成的 docker 配置(或任何其他文件) 。

解决方案是以其他用户身份运行 docker 命令,以便正确保存 docker 配置。

以下是要遵循的步骤:

1) 在 Cloud SDK 不可用的系统上向 Container Registry 进行身份验证:

对于现有用户 ( MYUSER):

sudo -u MYUSER docker-credential-gcr configure-docker

使用新生成的用户 ( NEWUSER):

sudo useradd -m NEWUSER
sudo -u NEWUSER docker-credential-gcr configure-docker

-u标志以指定用户身份执行命令。

docker-credential-gcr configure-docker将您的凭据存储在您的用户主目录中(替代docker login)。这样,您可以使用 Docker 的命令行工具直接与 Container Registry 进行交互。

2)创建 docker 组(如果不存在)并添加您的用户(需要NEWUSERMYUSER没有运行 Docker 命令的权限):

sudo groupadd docker
sudo usermod -aG docker NEWUSER

3) 如果需要,重启 docker 守护进程:

sudo systemctl restart docker

最后,您可以访问放置在私有容器注册表中的 docker 镜像MYUSERNEWUSER。如果你想运行 docker:

sudo -u MYUSER docker run ........

此处报告的命令在启动脚本中也可以正常工作,并且不需要密码。

于 2021-10-19T10:02:21.353 回答