【问题标题】:How to determine the container id or image name of an unknown docker volume如何确定未知 docker 卷的容器 id 或镜像名称
【发布时间】:2022-01-18 10:14:16
【问题描述】:

请问如何确定未知 docker 卷的容器 ID 或图像名称? 例如,我可以通过运行命令 'docker volume ls' 找到 docker 卷列表,但不幸的是,当我构建一些图像时,我没有安装特定的卷,所以我的大部分容器是在没有卷名的情况下构建的。下面列出了一些名称未知的卷的示例

3199e3e4f3c2b79f04b84523959cb250223a229fca2ba16540cdbfd77762a552 c1cba1883daed381d83d9940d48e5f5aceed327614c58dc4bfa3cd7a6849274f f2545f7cdef79e8c59dd8fc2a6d6de83876231554a738d25fe1f61f93c6b3eb9 f9cce0cfdd8ef8bae1e19aa41864e25f074929863a771b0ec729a119e2e880f7

请问如何确定未知 docker 卷的容器 id 或镜像名称

我如何确定哪些卷是用于 MYSQL、JENKINS、PROMETHEUS 的??

我的问题的原因

我正在尝试在 Grafana 上启用警报,以便我可以通过电子邮件收到通知,但我收到了此错误消息

“对于电子邮件警报,我收到此消息。未配置 SMTP,请检查您的 grafana.ini 配置文件的 [smtp] 部分”

这意味着我必须编辑安装在 docker grafana 卷中的 grafana.ini 配置文件,但我无法执行此操作。

感谢您的帮助。

谢谢

【问题讨论】:

  • 这个问题不太合理;一个卷可以附加到多个容器,或者没有,Docker 并不真正知道卷中除了“有一些文件”之外的内容。如果您需要编辑配置文件,那么通过绑定挂载注入它比将其存储在不透明的命名卷中更好。

标签: docker docker-compose grafana docker-volume


【解决方案1】:

请使用:

docker ps -a --filter volume={{reference}}

例子:

docker ps -a --filter volume=3199e3e4f3c2b79f04b84523959cb250223a229fca2ba16540cdbfd77762a552

【讨论】:

    【解决方案2】:

    您不需要使用 Grafana 卷(实际上,当前的官方 Grafana 镜像默认没有任何卷)。您可以使用环境变量配置 Grafana。它们的语法为GF_<grafana ini section>_<upper case properties>。

    grafama.ini 配置:

    #################################### SMTP / Emailing #####################
    [smtp]
    enabled = true
    

    可以通过Docker容器环境变量来实现:

    GF_SMTP_ENABLED: true
    

    理论上,您还可以使用卷和覆盖默认容器/etc/grafana/grafana.ini 文件和您自己自定义的grafana.ini。

    【讨论】:

      【解决方案3】:

      要查看哪个卷映射到哪个容器,您可以尝试:

      sudo docker ps -a --format '{{ .ID }}' | xargs -I {} docker inspect -f '{{ .Name }}{{ printf "\n" }}{{ range .Mounts }}{{ printf "\n\t" }}{{ .Type }} {{ if eq .Type "bind" }}{{ .Source }}{{ end }}{{ .Name }} => {{ .Destination }}{{ end }}{{ printf "\n" }}' {}
      

      这列出了所有容器和附加到它的卷。

      我建议在外部托管 grafana.ini 文件。不一定通过卷,而是通过文件绑定并通过环境变量告诉 grafana 在哪里可以找到 grafana.ini。这使您可以直接访问容器外部的文件。这是 docker 命令的一部分。

      -v /data/docker/volumes/grafana-config/grafana2.ini:/etc/grafana/grafana2.ini \
      -e "GF_PATHS_CONFIG=/etc/grafana/grafana2.ini" \
      

      上面的命令会显示如下内容:

      /grafana
          bind /data/grafana/grafana-config/grafana2.ini => /etc/grafana/grafana2.ini
          volume grafana-storage => /var/lib/grafana
      

      【讨论】:

      • 很抱歉再次打扰您)最初我只是使用此命令运行 Grafana docker 并没有使用 docker compose 所以我的问题是如何在不删除当前运行的 docker 容器的情况下添加它。 -v /data/docker/volumes/grafana-config/grafana2.ini:/etc/grafana/grafana2.ini \ -e "GF_PATHS_CONFIG=/etc/grafana/grafana2.ini" \ 因为我在 Grafana 上做了其他设置不想松开它?我有其他数据源,我不想从头开始重建所有内容。对不起,如果这个问题看起来很蹩脚,我对 docker 有点陌生。
      • 我不知道如何重新配置​​容器以在之后连接卷/绑定。关于容器中的数据/配置,我将采用备份/恢复方法,使用 a) grafana 备份 (grafana.com/docs/grafana/latest/installation/upgrading/#backup) 或 b) 使用 docker cp (docker cp :/文件/路径/内部/容器/主机/路径/目标)
      猜你喜欢
      • 2021-08-20
      • 2019-06-03
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      相关资源
      最近更新 更多