【问题标题】:Why does Docker Stack Deploy have Swarm Manager Error only with remote Jenkins deploy?为什么 Docker Stack Deploy 只有在远程 Jenkins 部署时才会出现 Swarm Manager 错误?
【发布时间】:2021-02-11 02:12:01
【问题描述】:

所以我有一个基本图像,它已经在本地和通过 SSH 进行了测试,它工作正常。但是当我尝试通过 Jenkins sh 部署它时,问题就出现了。

当我远程进入实例并运行以下命令时:

docker stack deploy --compose-file=simpleTest.yml simpleTestService

我的服务运行良好。但是,当我的 Jenkins 代理运行相同的命令时 - 我得到了

节点不是集群管理器。使用“docker swarm init”或“docker swarm join" 以将此节点连接到 swarm 并重试

我不确定为什么会这样?是不是因为我需要告诉 Jenkins Agent 加入 Swarm Manager(如何?)

这是我的示例 .yml。据我所知,docker-compose 版本由我在 YML 中的“3”决定,我的 Docker 版本是 19.03.13-CE。我的 Jenkins 代理在不同的实例上,我从存储库中提取图像并将其推送到目标实例(Docker 所在的位置)。信息显示 Swarm 处于活动状态,并且是管理器。当我在实际实例上运行它时,我编辑了图像名称以具有存在于我的 repo 中的构建的名称和标签(我使用了与 Jenkins 相同的图像和标签来排除任何奇怪的不一致)。

version: "3"
services:
  app:
    image: "${FULLNAMEWITHTAG}"
    container_name: SimpleTest
    restart: always
    environment:
      NODE_ENV: production
    build: .
    ports:
      - "9001:9001"

【问题讨论】:

    标签: docker jenkins docker-compose docker-swarm


    【解决方案1】:

    您要将堆栈部署到的节点必须在集群中才能这样做。不确定您是如何配置 Jenkins,但为了安全起见,您可以只初始化 swarm(也许它正在您运行命令的节点上工作,但 Jenkins 使用了另一个代理...仔细检查一下!)。

    错误信息已经告诉你解决方案,只需让 Jenkins 运行docker swarm init 命令即可。你如何完成取决于。以下是声明性管道的示例:

    steps {
       [...]
       sh 'docker swarm init'
       [deploy the stack]
    }
    

    【讨论】:

      【解决方案2】:

      我通过安装 SSH 插件并让 Jenkins SSH 执行命令来解决它。这样,它实际上将堆栈部署为 Swarm Manager。

      除非明确告知这样做,否则使用 Docker Swarm 运行 SH 脚本不会自动加入 Swarm 或作为工作节点执行操作。因此,您确实需要将 Swarm 或 SSH 加入到盒子中(并因此充当经理)

      【讨论】:

        猜你喜欢
        • 2021-05-21
        • 2021-09-27
        • 1970-01-01
        • 2018-09-10
        • 2022-01-18
        • 2021-06-23
        • 1970-01-01
        • 2013-04-23
        • 1970-01-01
        相关资源
        最近更新 更多