docker-compose 使用独特的环境变量进行扩展

2023-12-19

我的 docker-compose 文件中有一个示例计算服务,它按预期工作得很好。

version: "3"
services:
  compute-service:
    image: dummy/compute
    environment:
      - INPUT=2

然而,有时我需要使用不同的输入来运行此服务(例如 INPUT = 4、7、9、10、12 等)。我不喜欢为每个输入多次复制和粘贴服务的想法。缩放是一种选择。但是我如何确保每个实例都适用于唯一的输入变量。


我知道我可以使用这样的环境变量。我的问题与如何传递唯一值作为缩放的一部分有关!

version: "3"
services:
  compute-service:
    image: dummy/compute
    environment:
      - INPUT=${INPUT}

With docker-compose, 我不相信对此有任何支持 https://github.com/docker/compose/issues/4964。但是,在 Swarm 模式下,可以使用类似的 compose 文件,您可以通过{{.Task.Slot}}作为环境变量使用服务模板 https://docs.docker.com/engine/reference/commandline/service_create/#create-services-using-templates。您可以使用以下命令部署单节点 swarm 集群docker swarm init。代替docker-compose up,我正在部署以下示例docker stack deploy -c docker-compose.yml test.

这是一个使用 docker-compose.yml 文件的示例{{.Task.Slot}}功能:

version: '3'
services:
  test:
    image: busybox
    command: /bin/sh -c "echo My task number is $$task_id && tail -f /dev/null"
    environment:
      task_id: "{{.Task.Slot}}"
    deploy:
      replicas: 5

然后,检查每个正在运行的容器:

$ docker ps --filter label=com.docker.swarm.service.name=test_test
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
ccd0dbebbcbe        busybox:latest      "/bin/sh -c 'echo My…"   About a minute ago   Up About a minute                       test_test.3.i3jg6qrg09wjmntq1q17690q4
bfaa22fa3342        busybox:latest      "/bin/sh -c 'echo My…"   About a minute ago   Up About a minute                       test_test.5.iur5kg6o3hn5wpmudmbx3gvy1
a372c0ce39a2        busybox:latest      "/bin/sh -c 'echo My…"   About a minute ago   Up About a minute                       test_test.4.rzmhyjnjk00qfs0ljpfyyjz73
0b47d19224f6        busybox:latest      "/bin/sh -c 'echo My…"   About a minute ago   Up About a minute                       test_test.1.tm97lz6dqmhl80dam6bsuvc8j
c968cb5dbb5f        busybox:latest      "/bin/sh -c 'echo My…"   About a minute ago   Up About a minute                       test_test.2.757e8evknx745120ih5lmhk34

$ docker ps --filter label=com.docker.swarm.service.name=test_test -q | xargs -n 1 docker logs
My task number is 3
My task number is 5
My task number is 4
My task number is 1
My task number is 2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker-compose 使用独特的环境变量进行扩展 的相关文章

随机推荐

  • 合并两个分支,如何接受一个分支来解决所有冲突

    我将两个分支合并在一起 比方说brachA 和branchB 他们有大约 100 个存在冲突的文件 Branch 的所有工作都得到了认可 并且 100 是我所需要的 我不想强制推送分支或任何东西 有没有一种方法可以合并这两个文件 并只说对于
  • 如何在git中列出当前项目的所有日志?

    我使用git log 但我发现它只能列出当前分支下的日志 但我想列出所有分支的所有日志并按修改日期排序 这可能吗 如何做到这一点 提前致谢 你可以检查这个问题 https stackoverflow com questions 220894
  • spring-boot:编译致命错误:目标版本无效:17

    刚刚经历弹簧启动教程 https docs spring io spring boot docs current SNAPSHOT reference htmlsingle getting started first application
  • 在 Visual Studio 中哪里可以观察全局数据结构、变量?

    当我调试并到达断点时 我只能在 Visual Studio 2008 的 局部变量 选项卡中看到局部变量 在 Visual Studio 中哪里可以观察全局数据结构 变量 In the Watch窗户 这Local选项卡用于局部变量 顾名思
  • 使用 ImageMagick 或 Ghostscript(或其他)缩放 PDF 以适合页面?

    我需要缩小一些大型 PDF 以在 8 5x11 英寸 标准信函 页面上打印 ImageMagick Ghostscript 可以处理这类事情吗 还是因为我使用了错误的工具来完成这项工作 所以遇到了很多麻烦 仅仅依靠客户端打印对话框中的 缩小
  • SceneKit:无论您触摸屏幕的何处,unprojectPoint都会返回相同/相似的点

    下面的代码应该将触摸坐标转换为 SceneKit 场景的世界坐标 但是 如下面的输出所示 返回的点unprojectPoint无论您触摸屏幕的哪个位置 iPhone 5s 都会有效地返回同一点 类文档为unprojectPoint建议使用
  • 是否可以仅使用 GPU 来加厚二次贝塞尔曲线?

    我在 OpenGL 程序中绘制了大量二次贝塞尔曲线 现在 曲线只有一像素细 并且是由软件生成的 因为我还处于相当早期的阶段 看看什么有效就足够了 Simply enough given 3 control points P0 to P2 I
  • Django:进行原始 SQL 查询,传递多个/重复参数?

    希望这应该是一个相当简单的问题 我只是对 Python 和 Django 了解不够 无法回答它 我在 Django 中有一个原始 SQL 查询 它采用六个不同的参数 其中前两个 centreLat 和 centerLng 均重复 query
  • C# - 我应该如何将 datagridview 组合框添加到数据表并在 datagridview 中预览它?

    抱歉 如果这是一个愚蠢的问题 我对此很陌生 我应该如何将组合框添加到数据表 然后将其加载到数据网格视图中 这可以做到吗 这是最好的方法吗 非常感谢有关如何执行此操作的提示和教程 先感谢您 string columnNames dataTab
  • Google Colab 上 R-Keras 的工作流程 [重复]

    这个问题在这里已经有答案了 我想用 R 进行机器学习 请接受我的选择 并且想知道我是否可以使用 google colab 上的 IRkernel 来安装和运行 keras 从而以任何方式访问 TensorFlow 库 是否有一个有效 可访问
  • 基于索引列合并数据帧[重复]

    这个问题在这里已经有答案了 我可以看到我想做的事情是可以通过concat 合并索引上的数据帧 https stackoverflow com questions 21923880 merge dataframes on index 为什么我
  • Python 循环遍历文件夹并重命名文件

    我试图浏览一堆文件夹并进入每个文件夹并将特定文件重命名为不同的名称 我只是陷入了文件夹循环部分 我的文件系统如下所示 Root Directory Folder File1 File2 File3 Folder File1 File2 Fi
  • 将 pandas 中的通话数据拆分为 15 分钟间隔

    我是 python 和 pandas 的新手 尽管我研究了很多关于间隔的知识 但我找不到任何解决我的问题的方法 我希望有人可以提供帮助 这是我的 DF 示例 df pd DataFrame data Mel Gibson German 20
  • Laravel 混合版本控制不会删除旧的构建文件

    我正在使用 Laravel 5 4 和 mix 来版本化我的 javascript 和 scss 文件 问题是 它不会清除以前构建的文件 而只是添加一个具有不同文件名的新文件 即app 9d3e179e85922aad6ccf js 在我开
  • Go 中的符号 [:] 是什么意思?

    我在一些代码中发现了这一点 h s Hash tx sig err crypto Sign h prv 什么是 意思是 如果这是数组的完整切片 为什么不传递数组本身呢 这是什么编码风格 我想知道 在Go中 数组和切片略有不同 不能互换使用
  • AJAX 分页后的 WordPress 类别

    我真的很难找到一种方法来使用 ajax 为我的 WordPress 帖子创建分页 我找到的解决方案不起作用 要获得更多信息 这里有一个链接 底部有用于分页的项目符号 单击这些按钮后 我希望网站能够加载新帖子而不触发页面刷新 http max
  • 填充 va_list

    有没有办法创建一个va list从头开始 我正在尝试调用一个需要va list作为参数 func void entry int num args va list args char key 来自不接受可变数量参数的函数 我能想到的唯一方法是
  • 信号无法通过 execv() 正确重新启用

    我正在为我正在开发的 Linux 发行版编写一个系统关键程序 它需要在收到某些信号时自行重新启动 以避免崩溃 问题是 重新启动后 我无法重新启用该信号 也就是说 信号不能被接收两次 execv 自身执行后 当新进程调用 signal 来设置
  • 简单不平衡搜索树的平均渐近深度是多少?

    对于平衡搜索树 所有情况都是 O log N 对于不平衡搜索树 最坏情况是 O N 例如插入 1 2 3 4 最好情况复杂度是平衡时 例如插入 6 4 8 3 5 7 我们如何定义不平衡搜索树的平均情况复杂度 二叉树的平均高度为 Theta
  • docker-compose 使用独特的环境变量进行扩展

    我的 docker compose 文件中有一个示例计算服务 它按预期工作得很好 version 3 services compute service image dummy compute environment INPUT 2 然而 有