从容器名获取Docker容器id

从容器的名字中获取Docker容器id的命令是什么?

221823 次浏览

我能想到的最简单的方法是解析docker ps的输出

让我们以交互方式运行最新的ubuntu映像并连接到它

docker run -it ubuntu /bin/bash

如果你在另一个终端运行docker ps,你会看到类似的结果

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8fddbcbb101c        ubuntu:latest       "/bin/bash"         10 minutes ago      Up 10 minutes                           gloomy_pasteur

不幸的是,解析这种格式并不容易,因为他们使用空格手动对齐内容

$ sudo docker ps | sed -e 's/ /@/g'
CONTAINER@ID@@@@@@@@IMAGE@@@@@@@@@@@@@@@COMMAND@@@@@@@@@@@@@CREATED@@@@@@@@@@@@@STATUS@@@@@@@@@@@@@@PORTS@@@@@@@@@@@@@@@NAMES
8fddbcbb101c@@@@@@@@ubuntu:latest@@@@@@@"/bin/bash"@@@@@@@@@13@minutes@ago@@@@@@Up@13@minutes@@@@@@@@@@@@@@@@@@@@@@@@@@@gloomy_pasteur@@@@@@

下面是一个将输出转换为JSON的脚本。

https://gist.github.com/mminer/a08566f13ef687c17b39

实际上,输出比这更方便一些。每个字段是20个字符宽。 [['CONTAINER ID',0],['IMAGE',20],['COMMAND',40],['CREATED',60],['STATUS',80],['PORTS',100],['NAMES',120]] < / p >

在Linux中:

sudo docker ps -aqf "name=containername"

或者在OS X, Windows中:

docker ps -aqf "name=containername"

其中containername是你的容器名。

为了避免误报,正如@llia Sidorenko指出的那样,你可以像这样使用正则表达式锚:

docker ps -aqf "name=^containername$"

解释:

  • -q表示安静。只输出ID
  • -a for all。即使容器没有运行也可以工作
  • -f用于过滤器
  • ^容器名必须使用此字符串开始
  • $容器名必须使用此字符串结束
  1. 获取运行容器的容器id::

    $docker ps -qf "name=IMAGE_NAME"
    
    
    -f: Filter output based on conditions provided
    -q: Only display numeric container IDs
    
  2. Get container Ids of all containers ::

    $docker ps -aqf "name=IMAGE_NAME"
    
    
    -a: all containers
    

如果你想根据容器名获得完整的ContainerId,那么使用下面的命令

 docker ps --no-trunc -aqf name=containername

你可以试试这个:

docker inspect --format="\{\{.Id}}" container_name

这种方法与操作系统无关。

Docker镜像检查ImageName\ImageId——format=\{\{'.ConatinerConfig.Hostname'}}

命令如下:

docker ps --format 'CONTAINER ID : \{\{.ID}} | Name: \{\{.Names}} | Image:  \{\{.Image}} |  Ports: \{\{.Ports}}'

给出如下输出:

CONTAINER ID : d8453812a556 | Name: peer0.ORG2.ac.ae | Image:  hyperledger/fabric-peer:1.4 |  Ports: 0.0.0.0:27051->7051/tcp, 0.0.0.0:27053->7053/tcp
CONTAINER ID : d11bdaf8e7a0 | Name: peer0.ORG1.ac.ae | Image:  hyperledger/fabric-peer:1.4 |  Ports: 0.0.0.0:17051->7051/tcp, 0.0.0.0:17053->7053/tcp
CONTAINER ID : b521f48a3cf4 | Name: couchdb1 | Image:  hyperledger/fabric-couchdb:0.4.15 |  Ports: 4369/tcp, 9100/tcp, 0.0.0.0:5985->5984/tcp
CONTAINER ID : 14436927aff7 | Name: ca.ORG1.ac.ae | Image:  hyperledger/fabric-ca:1.4 |  Ports: 0.0.0.0:7054->7054/tcp
CONTAINER ID : 9958e9f860cb | Name: couchdb | Image:  hyperledger/fabric-couchdb:0.4.15 |  Ports: 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp
CONTAINER ID : 107466b8b1cd | Name: ca.ORG2.ac.ae | Image:  hyperledger/fabric-ca:1.4 |  Ports: 0.0.0.0:7055->7054/tcp
CONTAINER ID : 882aa0101af2 | Name: orderer1.o1.ac.ae | Image:  hyperledger/fabric-orderer:1.4 |  Ports: 0.0.0.0:7050->7050/tcp

在我的例子中,我在Ubuntu 20.04中运行Tensorflow Docker容器:在一个终端中运行你的Docker容器,我用它运行它

docker run -it od

然后启动另一个终端,在docker ps下面运行sudo:

sudo docker ps

我成功获取了容器id:

CONTAINER ID        IMAGE               COMMAND             CREATED
STATUS              PORTS               NAMES
e4ca1ad20b84        od                  "/bin/bash"         18 minutes ago
Up 18 minutes                           unruffled_stonebraker

我尝试了sudo docker container stats,它会给出容器ID以及内存使用和名称的详细信息等。如果你想停止查看进程,执行Ctrl+C。我希望它对你有用。

我还需要一个脚本需要附加到容器的容器名称或Id。 做了一些调整,但这对我来说非常好

export svr=$(docker ps --format "table \{\{.ID}}"| sed 's/CONTAINER ID//g' | sed '/^[[:space:]]*$/d')
docker exec -it $svr bash

需要使用sed命令来消除“CONTAINER ID”也会被打印出来的情况…但我只需要实际的id存储在一个变量。

感谢https://stackoverflow.com/a/65513726/889126的回答,它给了我一个想法,使一个完整的bash脚本,因为它是

export api_image_id=$(docker inspect --format="\{\{.Id}}" <image-name> | sed '/^[[:space:]]*$/d')


sudo docker exec -i -t ${api_image_id} /bin/bash

我需要一个特定的容器,并使一个脚本从它提取一些信息在一个快速的视线。

希望这对其他人有所帮助。

你可以使用下面的命令打印容器id:

docker container ls  | grep 'container-name' | awk '{print $1}'

作为奖励,如果你想用容器名登录到容器:

docker exec -it $(docker container ls  | grep 'container-name' | awk '{print $1}') /bin/bash

要有容器id和映像id -

$ docker container ls -a | awk 'NR>1 {print $1, $2}'