docker compose 无法从 google 容器注册表中拉取镜像
docker compose can't pull image from google container registory
我有 google 容器注册表上的图像从 docker 中心移动。我有我的 docker-compose.yml。撰写文件已成功从 docker 集线器中提取图像。但我无法从 google 容器注册表中提取。
登录容器注册表的步骤
- gcloud auth revoke --all
- gcloud 授权登录
- gcloud 配置设置项目 projectId
- gcloud auth activate-service-account deploy@projectId.iam.gserviceaccount.com --key-file=service-account.json
- gcloud auth 配置-docker
- (a) gcloud auth 打印访问令牌 | docker login -u oauth2accesstoken --password-stdin https://asia.gcr.io
登录结果成功
docker-组成
ERROR: pull access denied for [my_image_name], repository does not exist or may require 'docker login': denied: requested access to the resource is denied
我可以用下面的命令拉取镜像
docker pull asia.gcr.io/projectid/myimagename/data-api:latest
docker撰写
version: "3.3"
services:
data_api:
container_name: myimagename-data-api
image: myimagename/data-api
expose:
- 4000
ports:
- "4001:4000"
depends_on:
- db
environment:
DATABASE_URL: mysql://root:root@db:3306/myimagename
ACCESS_TOKEN_SECRET: xxxxxxxxxx
REFRESH_TOKEN_SECRET: xxxxxxxxx
networks:
- db-api
db:
container_name: myimagename-db
image: myimagename/db
restart: always
volumes:
- ./db/data/:/var/lib/mariadb/data
environment:
MARIADB_ROOT_PASSWORD: root
MARIADB_DATABASE: myimagename
expose:
- 3306
ports:
- "3307:3306"
networks:
- db-api
networks:
db-api:
我在这里的偏好是使用我的个人 (gcloud config get-value account
) 帐户的凭据,因为它最简单:
gcloud auth print-access-token \
| docker login \
--username=oauth2accesstoken \
--password-stdin \
asia.gcr.io
如果您使用服务帐户(密钥),您需要确保该帐户对项目具有适当的权限(对于推|拉,您需要 roles/storage.Admin
?)(!) 或,如果您更喜欢代表注册表的存储桶。
另一个挑战是,如果您使用的是 Snaps (?),则 Docker 运行时的凭据存储与 Docker Compose 使用的凭据存储之间可能存在分区。
I was unclear whether you can docker pull
from the registry?
如果您查看 service-account.json
文件,您会发现它不是传统意义上的您的“密码”。因此,将其作为标准输入密码输入是行不通的。编辑:TIL - 您 可以 根据 doc
通过管道将凭据文件作为密码输入
我建议使用 gcloud credential helper——如果你有权限,你可以用你自己的身份登录,或者你可以使用带有 credentials.json 文件的服务帐户——这似乎是你的情况那里。请务必在您的服务帐户上拥有正确的 IAM 权限。
仅拉取(读取):
- roles/storage.objectViewer
推(写)和拉:
- roles/storage.legacyBucketWriter
好的,我终于找到问题了。它是图像名称。我们不能使用与 docker 集线器相同的图像名称。我们需要完整路径。
图片:asia.gcr.io/projectid/myimagename/data-api:最新
而不是myimagename/data-api
我有 google 容器注册表上的图像从 docker 中心移动。我有我的 docker-compose.yml。撰写文件已成功从 docker 集线器中提取图像。但我无法从 google 容器注册表中提取。
登录容器注册表的步骤
- gcloud auth revoke --all
- gcloud 授权登录
- gcloud 配置设置项目 projectId
- gcloud auth activate-service-account deploy@projectId.iam.gserviceaccount.com --key-file=service-account.json
- gcloud auth 配置-docker
- (a) gcloud auth 打印访问令牌 | docker login -u oauth2accesstoken --password-stdin https://asia.gcr.io
登录结果成功
docker-组成
ERROR: pull access denied for [my_image_name], repository does not exist or may require 'docker login': denied: requested access to the resource is denied
我可以用下面的命令拉取镜像
docker pull asia.gcr.io/projectid/myimagename/data-api:latest
docker撰写
version: "3.3"
services:
data_api:
container_name: myimagename-data-api
image: myimagename/data-api
expose:
- 4000
ports:
- "4001:4000"
depends_on:
- db
environment:
DATABASE_URL: mysql://root:root@db:3306/myimagename
ACCESS_TOKEN_SECRET: xxxxxxxxxx
REFRESH_TOKEN_SECRET: xxxxxxxxx
networks:
- db-api
db:
container_name: myimagename-db
image: myimagename/db
restart: always
volumes:
- ./db/data/:/var/lib/mariadb/data
environment:
MARIADB_ROOT_PASSWORD: root
MARIADB_DATABASE: myimagename
expose:
- 3306
ports:
- "3307:3306"
networks:
- db-api
networks:
db-api:
我在这里的偏好是使用我的个人 (gcloud config get-value account
) 帐户的凭据,因为它最简单:
gcloud auth print-access-token \
| docker login \
--username=oauth2accesstoken \
--password-stdin \
asia.gcr.io
如果您使用服务帐户(密钥),您需要确保该帐户对项目具有适当的权限(对于推|拉,您需要 roles/storage.Admin
?)(!) 或,如果您更喜欢代表注册表的存储桶。
另一个挑战是,如果您使用的是 Snaps (?),则 Docker 运行时的凭据存储与 Docker Compose 使用的凭据存储之间可能存在分区。
I was unclear whether you can
docker pull
from the registry?
如果您查看 service-account.json
文件,您会发现它不是传统意义上的您的“密码”。因此,将其作为标准输入密码输入是行不通的。编辑:TIL - 您 可以 根据 doc
我建议使用 gcloud credential helper——如果你有权限,你可以用你自己的身份登录,或者你可以使用带有 credentials.json 文件的服务帐户——这似乎是你的情况那里。请务必在您的服务帐户上拥有正确的 IAM 权限。
仅拉取(读取):
- roles/storage.objectViewer
推(写)和拉:
- roles/storage.legacyBucketWriter
好的,我终于找到问题了。它是图像名称。我们不能使用与 docker 集线器相同的图像名称。我们需要完整路径。
图片:asia.gcr.io/projectid/myimagename/data-api:最新
而不是myimagename/data-api