Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在docker群中的特定节点上运行docker容器_Docker_Jenkins_Docker Swarm - Fatal编程技术网

在docker群中的特定节点上运行docker容器

在docker群中的特定节点上运行docker容器,docker,jenkins,docker-swarm,Docker,Jenkins,Docker Swarm,我有一个jenkins管道,它在NUC服务器上构建和运行各种容器。 此NUC与另一个NUC位于群集(群)上。 我最近在我的设置和集群上添加了几个raspberry PI,所以现在我想知道是否有办法命令Jenkins在x86_x64或armhf设备上部署 我尝试了在其他问题上找到的-e约束:node=解决方案,但没有成功 我从指向另一个节点的x86_x64节点和指向armhf节点的x86_x64节点尝试了上述命令 我不想将这些容器作为服务运行,也不关心任何负载平衡器,我只想在特定的体系结构上运行容

我有一个jenkins管道,它在NUC服务器上构建和运行各种容器。 此NUC与另一个NUC位于群集(群)上。 我最近在我的设置和集群上添加了几个raspberry PI,所以现在我想知道是否有办法命令Jenkins在
x86_x64或armhf
设备上部署

我尝试了在其他问题上找到的
-e约束:node=
解决方案,但没有成功

我从指向另一个节点的
x86_x64
节点和指向
armhf
节点的
x86_x64
节点尝试了上述命令


我不想将这些容器作为服务运行,也不关心任何负载平衡器,我只想在特定的体系结构上运行容器(
x86_x64或armhf
,取决于我要部署的内容)

为什么不想使用服务?服务是我们在Swarm中协调事物的方式<代码>docker容器…将仅在单个主机上启动/停止/检查/操作内容。既然您已经设置了swarm群集,为什么不使用服务呢?

您不能对容器使用约束,只能对服务使用约束

话虽如此,对服务使用约束似乎是一个好办法。 您可以在中了解有关服务约束的更多信息。 以下是一些有关约束如何匹配节点或Docker引擎标签的示例:

# Node ID
node.id==2ivku8v2gvtg4

# Node hostname
node.hostname!=node-2

# Node role
node.role==manager

# Node labels
node.labels.security==high

# Docker Engine's labels
engine.labels.operatingsystem==ubuntu 14.04
如果要匹配特定的主机名,需要使用
node.hostname==
而不是
node==

您还需要从服务定义
deploy
策略中更新
restart\u策略
键,以防止在第一个容器成功终止其进程后启动新容器

将其包装在一起您需要这样的东西:

version: "3.7"
services:
  myapp:
    image: <my_image>
    deploy:
      placement:
        constraints:
          - node.labels.arch == x86_64
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s
docker节点将使用键
arch
和以下值之一进行标记:

  • armhf
  • armv7l
  • i386
  • x86_64
- hosts: swarm
  tasks:
    - name: Add label to node specifying architecture 
      docker_node:
        hostname: "{{ inventory_hostname }}"
        labels:
          arch: "{{ ansible_architecture }}"