首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用yq解析docker-compose.yml以生成文档

用yq解析docker-compose.yml以生成文档
EN

Stack Overflow用户
提问于 2022-07-24 21:35:30
回答 1查看 178关注 0票数 0

我正试图使用yq (https://github.com/mikefarah/yq的go实现)解析我的坞-撰写文件,以便使用asciidoc自动生成文档。

我的对接者-Compose.yml看上去相当简单,没有做什么不寻常的事情:

代码语言:javascript
复制
---
version: "3.3"
services:

  # prometheus metrics
  node_exporter:
    image: prom/node-exporter:latest
    container_name: node_exporter
    labels:
      description: Prometheus exporter to monitor system metrics
    restart: always
    command:
      - --path.rootfs=/host
    pid: host
    network_mode: host
    # ports:
    #   - 9100:9100
    # The network_mode: host tells docker to run the container as if it was running on the
    # server itself, so all ports exports by the container will directly be mapped to the server.
    volumes:
      - /:/host:ro,rslave
      - /etc/timezone:/etc/timezone:ro

  # prometheus metrics
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    restart: always
    expose:
      - 9110
    ports:
      - 9110:8080
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

  # Mange containers
  portainer:
    image: portainer/portainer-ce:alpine
    container_name: portainer
    command: -H unix:///var/run/docker.sock --admin-password-file /tmp/portainer_passwords
    restart: always
    ports:
      - 9990:9000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
      - ./assets/portainer.passwd:/tmp/portainer_passwords
      - /etc/timezone:/etc/timezone:ro

volumes:
  portainer_data:

我想要每项服务的一些信息。对我来说最重要的是形象。容器名称重新启动和端口。另外,可能会给->描述贴上标签,这是我在某些文档中使用的字段(相应的服务实际上是做什么的)。

我不知道如何将这些字段合并到相应的服务中。当我运行yq eval '.services.[] | .container_name, .services.[] | .image' $composeFile时,我首先得到3行带有容器名称的行,然后得到3行带有图像的行。

代码语言:javascript
复制
node_exporter
cadvisor
portainer
prom/node-exporter:latest
gcr.io/cadvisor/cadvisor:latest
portainer/portainer-ce:alpine

此结果不按服务分组。我更喜欢这样的:

代码语言:javascript
复制
node_exporter
prom/node-exporter:latest
cadvisor
gcr.io/cadvisor/cadvisor:latest
portainer
portainer/portainer-ce:alpine

或者,由于我想生成asciidoc,最好的解决方案是:

代码语言:javascript
复制
|node_exporter |prom/node-exporter:latest
|cadvisor |gcr.io/cadvisor/cadvisor:latest
|portainer |portainer/portainer-ce:alpine

通过这种方式,我可以生成一个asciidoc表的主体,其中包含关于我的文档服务的信息。

有谁知道我怎样才能让yq像我一样工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-24 21:57:32

每个.services.[]启动一个新的迭代。做一次,从那里提取你所需要的一切:

代码语言:javascript
复制
yq eval '.services.[] | "|" + .container_name + "| " + .image'
代码语言:javascript
复制
|node_exporter| prom/node-exporter:latest
|cadvisor| gcr.io/cadvisor/cadvisor:latest
|portainer| portainer/portainer-ce:alpine
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73102220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档