当docker指向swarm

时间:2016-05-09 13:46:47

标签: docker docker-machine dockerhub docker-swarm

我遇到google container registrydockerhub的问题,其中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命令?

1 个答案:

答案 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