Docker:群集工作节点未找到本地构建的映像 [英] Docker: Swarm worker nodes not finding locally built image
问题描述
也许我错过了一些东西,但是我做了一个本地的码头工人形象。我有一个3节点集群并正在运行。两名工人和一名经理。我使用标签作为约束。当我通过约束向其中一个工人提供服务时,如果该图像是公开的,则效果很好。
Maybe I missed something, but I made a local docker image. I have a 3 node swarm up and running. Two workers and one manager. I use labels as a constraint. When I launch a service to one of the workers via the constraint it works perfectly if that image is public.
也就是说,如果我这样做:
That is, if I do:
docker service create --name redis --network my-network --constraint node.labels.myconstraint==true redis:3.0.7-alpine
然后,redis服务被发送到工作节点之一,并且功能齐全。同样,如果我在没有约束的情况下运行本地构建的映像,由于我的经理也是工作人员,因此它会安排给经理,并且运行得很好。但是,当我添加约束时,它在工作节点上失败,从 docker service ps 2l30ib72y65h
中我看到:
Then the redis service is sent to one of the worker nodes and is fully functional. Likewise, if I run my locally built image WITHOUT the constraint, since my manager is also a worker, it gets scheduled to the manager and runs perfectly well. However, when I add the constraint it fails on the worker node, from docker service ps 2l30ib72y65h
I see:
... Shutdown Rejected 14 seconds ago "No such image: my-customized-image"
有没有一种方法可以使工作人员可以访问群集管理节点上的本地映像?它是否使用可能未打开的特定端口?如果没有,我应该怎么做-运行本地存储库?
Is there a way to make the workers have access to the local images on the manager node of the swarm? Does it use a specific port that might not be open? If not, what am I supposed to do - run a local repository?
推荐答案
管理器节点未共享本地资源本身的图像。您需要启动注册表服务器(或用户hub.docker.com)。为此所需的工作不是很重要:
The manager node doesn't share out the local images from itself. You need to spin up a registry server (or user hub.docker.com). The effort needed for that isn't very significant:
# first create a user, updating $user for your environment:
if [ ! -d "auth" ]; then
mkdir -p auth
fi
touch auth/htpasswd
chmod 666 auth/htpasswd
docker run --rm -it \
-v `pwd`/auth:/auth \
--entrypoint htpasswd registry:2 -B /auth/htpasswd $user
chmod 444 auth/htpasswd
# then spin up the registry service listening on port 5000
docker run -d -p 5000:5000 --restart=always --name registry \
-v `pwd`/auth/htpasswd:/auth/htpasswd:ro \
-v `pwd`/registry:/var/lib/registry \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Local Registry" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-e "REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry" \
registry:2
# then push your image
docker login localhost:5000
docker tag my-customized-image localhost:5000/my-customized-image
docker push localhost:5000/my-customized-image
# then spin up the service with the new image name
# replace registryhost with ip/hostname of your registry Docker host
docker service create --name custom --network my-network \
--constraint node.labels.myconstraint==true --with-registry-auth \
registryhost:5000/my-customized-image
这篇关于Docker:群集工作节点未找到本地构建的映像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!