首页 > 解决方案 > 是否有 docker API 或 exec.Command 方法可以从给定的容器名称(不是容器列表)中检索容器 ID?

问题描述

我正在为 docker 容器开发一个 go CUI。我只需要选定容器名称的容器 ID。

我试过这样:

  id, err := exec.Command("/bin/sh", "-c", "docker", fmt.Sprintf("ps --no-trunc -aqf name=%s"),conName).Output()
  if err != nil {
         log.Fatal(err)
  }
  fmt.Println("CONTAINER ID:", id)

输出:

CONTAINER ID: []

标签: dockergocontainers

解决方案


这对我有用(可能你不需要sudo):

id, err := exec.Command("sudo", "docker", "ps", "--no-trunc", "-aqf", fmt.Sprintf("name=%s",conName)).Output()
if err != nil {
    log.Fatal(err)
}
fmt.Println("CONTAINER ID:", string(id))

您的错误是, conName 不在括号内,您还必须将 id 转换为字符串,因为 exec.Command 返回一个字节数组。此外,所有参数都应单独列出,如果您将多个用空格分隔的参数作为一个字符串放置,它将不起作用。


推荐阅读