我遇到google container registry
和dockerhub
的问题,其中docker pull
会返回以下错误。
GCR
错误:状态403尝试拉出存储库PROJECT_ID / IMAGE_NAME:“无法访问存储库:PROJECT_ID / IMAGE_NAME;请验证它是否存在且您是否有权访问它(未提供有效凭据)。”
dockerhub
使用默认标签:最新test-node0:拉动 k8tems / hello-world:latest ...:错误:图片k8tems / hello-world not 发现错误:图像k8tems / hello-world not found
只有当docker指向一个群时才会发生这种情况。
重现的步骤:
DOCKER_REGISTRY=asia.gcr.io/$PROJECT_ID
KEY_STORE=test-keystore
NODE_BASE=test-node
echo pushing hello-world image to gcr
docker pull hello-world
docker tag hello-world $DOCKER_REGISTRY/hello-world
docker push $DOCKER_REGISTRY/hello-world
echo setting up key store
docker-machine create \
-d digitalocean \
"$KEY_STORE"
docker $(docker-machine config "$KEY_STORE") run -d \
-p "8500:8500" \
-h "consul" \
progrium/consul -server -bootstrap
eval $(docker-machine env "$KEY_STORE")
docker-machine create \
-d digitalocean \
--swarm \
--swarm-master \
--swarm-discovery="consul://$(docker-machine ip "$KEY_STORE"):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip "$KEY_STORE"):8500" \
--engine-opt="cluster-advertise=eth0:2376" \
"$NODE_BASE"0
echo this fails
eval $(docker-machine env -swarm "$NODE_BASE"0)
docker pull $DOCKER_REGISTRY/hello-world
echo this succeeds
eval $(docker-machine env "$NODE_BASE"0)
docker pull $DOCKER_REGISTRY/hello-world
除上述代码段外,我还尝试将远程泊坞广告版本强制为1.10.3
并群集到1.1.3
,但错误仍然存在。
ubuntu:~$ docker-machine ls | grep test
test-keystore - digitalocean Running tcp://:2376 v1.10.3
test-node0 * digitalocean Running tcp://:2376 test-node0 (master) v1.10.3
ubuntu:~$ docker exec swarm-agent-master /swarm -v
swarm version 1.1.3 (7e9c6bd)
ubuntu:~$ docker -v
Docker version 1.10.2, build c3959b1
我可以做些什么来使用-swarm
标志工作,还是必须为每个节点运行pull命令?
答案 0 :(得分:0)
尝试JSON密钥文件!当您使用swarm或kubernetes等集群时,它是一个长期存在的凭证,并且比访问令牌更加一致。
示例命令: docker login -e 1234@5678.com -u _json_key -p" $(cat keyfile.json)" https://gcr.io
以下是包含更多详细信息的页面: https://cloud.google.com/container-registry/docs/advanced-authentication#using_a_json_key_file