gpt4 book ai didi

docker - 网站在独立容器中可用,而不是在群中

转载 作者:行者123 更新时间:2023-12-02 20:02:38 26 4
gpt4 key购买 nike

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

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

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

我可以通过其他PC上的浏览器访问:
  • http://host:94/page1.aspx
  • http://host:95/page1.aspx

  • 现在我想成群地运行它们。

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

    docker stack services websites端口号显示如下。
    Website1: *:94->94/tcp
    Website2: *:95->95/tcp

    但我无法使用以下网址访问它们中的任何一个:
  • http://host:94/page1.aspx
  • http://host:95/page1.aspx

  • 我得到 - 无法访问此站点

    如果我回到我正在运行的容器之一,我会看到端口号具有不同的格式。
    0.0.0.0:94->94/tcp (WORKING) VS *:94->94/tcp (NOT WORKING)

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

    这是我使用 compose 文件部署 docker stack 的方式
    docker stack deploy --compose-file docker-stack.yml websites

    docker-stack.yml 文件供引用。
    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 堆栈仅支持用于部署和副本的镜像。我相信您的图像是自定义图像,它们是 既不在 dockerhub 也不在任何私有(private)仓库中 .因此,当您尝试在堆栈中部署它时,部署在工作节点中的服务找不到这样的图像并且无法从 repo 下载它。因此服务不会在工作节点中启动。它在管理器节点中完美运行,因为图像已经存在于那里。

    所以,你必须 设置本地/私有(private)注册表或将图像推送到 docker 注册表,或者您甚至可以将图像从管理节点复制到工作节点 使用 docker savedocker load然后尝试使用 swarm 并在堆栈中部署它会起作用。

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

    另请注意,如果您设置没有自签名证书或使用自签名证书的本地私有(private)仓库,您可能需要配置不安全的注册表。我已经给出了相同的引用。

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

    现在根据您删除 swarm 并尝试使用运行 docker 服务的最后一条评论
    docker service create --replicas 2 --name contentlinksapi --publish mode=host,target=94,published=94,protocol=tcp contentlinksapi
    它抛出已经在使用的端口,因为它试图在同一台机器上创建 2 个副本。第一个副本因此绑定(bind)到端口 94,第二个副本抛出端口已在使用错误。

    供你引用。

  • Deploy a registry server
  • Test an insecure registry
  • Docker service mode (检查以了解为什么在 docker service create 上的同一主机上部署具有两个副本的服务)
  • Docker save
  • Docker load
  • 关于docker - 网站在独立容器中可用,而不是在群中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52349501/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com