网站可以在独立容器中使用,而不是在群集中

问题描述 投票:0回答:1

我在Windows Server 2016上运行了Docker CE,带有2个图像。

当我在容器中运行时,一切都很好。

docker run --detach --name Website1 --publish 94:94 webimage1
docker run --detach --name Website2 --publish 95:95 webimage2

我可以通过其他PC上的浏览器访问:

现在我想在swarm中运行它们。

我已经通过docker教程并设置了docker-compose文件,包括服务,端口映射。该设置包含1个副本的网站1,2个副本的网站2。

docker stack services websites端口号码显示如下。

Website1: *:94->94/tcp
Website2: *:95->95/tcp

但我无法通过以下网址访问其中任何一个:

我明白了 - 这个网站无法联系到

如果我回到我的一个正在运行的容器中,我看到端口号具有不同的格式。

0.0.0.0:94->94/tcp (WORKING) VS *:94->94/tcp (NOT WORKING)

为了初始化docker swarm,我在端口2377上使用了qazxsw poi和主机的IP地址。

以下是我使用compose文件部署docker stack的方法

docker swarm init

docker-stack.yml文件供参考。

docker stack deploy --compose-file docker-stack.yml websites

任何指导将不胜感激。

非常感谢

docker docker-compose
1个回答
0
投票

从评论中的对话来看,问题在于堆栈。

Docker堆栈仅支持部署和副本的映像。我相信你的图像是定制的,既不是在dockerhub也不是任何私人仓库。因此,当您尝试在堆栈中部署它时,在工作节点中部署的服务找不到此类映像,并且无法从repo下载它。因此,服务不会在工作节点中启动。它在管理器节点中完美运行,因为图像已存在于那里。

因此,您必须设置本地/私有注册表或将映像推送到docker注册表,否则您甚至可以使用version: "3" services: website1: image: website1:latest ports: - 94:94 depends_on: - website2 deploy: replicas: 1 restart_policy: condition: on-failure delay: 10s max_attempts: 3 window: 120s website2: image: website2:latest ports: - 95:95 deploy: mode: replicated replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure delay: 10s max_attempts: 3 window: 120s docker save将映像从manager节点复制到worker节点,然后尝试使用swarm并在堆栈中部署它将工作。

请注意使用swarm和注册表时,使用docker load部署堆栈时,如果使用docker stack deploy -c composefile.yml test注册表身份验证,则必须通过--with-registry-auth,否则其他节点可能无法通过注册表进行身份验证,如果找不到则会导致无法下载图像。

另请注意,如果您设置的本地私有仓库没有自签名证书或自签名证书,您可能需要配置不安全的注册表。我已经提到了相同的参考。

我建议设置一个没有任何身份验证和证书的本地仓库,并通过在daemon.json文件中添加不安全的注册表来访问它以进行测试。

现在按照你删除swarm并尝试使用docker service的最后一条评论

docker stack deploy -c composefile.yml test --with-registry-auth

它抛出端口已经在使用,因为它试图在同一台机器上创建2个副本。第一个副本绑定到端口94,因此,第二个副本抛出已使用错误的端口。

供你参考。

  1. docker service create --replicas 2 --name contentlinksapi --publish mode=host,target=94,published=94,protocol=tcp contentlinksapi
  2. Deploy a registry server
  3. Test an insecure registry(检查以了解为什么在Docker service mode上部署在同一主机中的两个副本的服务)
  4. docker service create
  5. Docker save
© www.soinside.com 2019 - 2024. All rights reserved.