也许我错过了一些东西,但我制作了一个本地 docker 镜像。我有一个 3 节点集群启动和运行。两名 worker 和一名经理。我使用标签作为约束。当我通过约束向其中一个工作人员启动服务时,如果该图像是公开的,它就可以完美运行。

也就是说,如果我这样做:

docker service create --name redis --network my-network  --constraint node.labels.myconstraint==true redis:3.0.7-alpine

然后将 redis 服务发送到其中一个工作节点并且功能齐全。同样,如果我在没有约束的情况下运行本地构建的镜像,由于我的经理也是一名 worker ,它会被安排给经理并且运行得非常好。但是,当我添加约束时,它在工作节点上失败,从 docker service ps 2l30ib72y65h 我看到:
... Shutdown       Rejected 14 seconds ago  "No such image: my-customized-image"

有没有办法让工作人员可以访问群管理节点上的本地镜像?它是否使用可能未打开的特定端口?如果没有,我该怎么办 - 运行本地存储库?

最佳答案

管理器节点不会从自身共享本地镜像。您需要启动一个注册服务器(或用户 hub.docker.com)。为此所需的努力不是很重要:

# 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:Swarm 工作节点找不到本地构建的镜像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39370925/

10-16 15:54