如何确定未知 docker 卷的容器 ID 或映像名称

How to determine the container id or image name of an unknown docker volume

请问如何确定未知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 ps -a --filter volume={{reference}}

示例:

docker ps -a --filter volume=3199e3e4f3c2b79f04b84523959cb250223a229fca2ba16540cdbfd77762a552

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

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 卷(实际上,当前的官方 Grafana 图像默认情况下没有任何卷)。您可以使用环境变量配置 Grafana。它们的语法为 GF_<grafana ini section>_<upper case properties>.

grafama.ini 配置:

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

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

GF_SMTP_ENABLED: true

理论上您还可以使用卷并使用您自己的自定义 grafana.ini.

覆盖默认容器 /etc/grafana/grafana.ini 文件