从容器的名字中获取Docker容器id的命令是什么?
我能想到的最简单的方法是解析docker ps的输出
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 >
[['CONTAINER ID',0],['IMAGE',20],['COMMAND',40],['CREATED',60],['STATUS',80],['PORTS',100],['NAMES',120]]
在Linux中:
sudo docker ps -aqf "name=containername"
或者在OS X, Windows中:
docker ps -aqf "name=containername"
其中containername是你的容器名。
containername
为了避免误报,正如@llia Sidorenko指出的那样,你可以像这样使用正则表达式锚:
docker ps -aqf "name=^containername$"
解释:
-q
-a
-f
^
$
获取运行容器的容器id::
$docker ps -qf "name=IMAGE_NAME" -f: Filter output based on conditions provided -q: Only display numeric container IDs
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。我希望它对你有用。
sudo docker container stats
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}'