Linux 如何在终端管道请求中从docker容器名称的一部分获取和使用docker容器id?

Linux 如何在终端管道请求中从docker容器名称的一部分获取和使用docker容器id?,linux,docker,grep,Linux,Docker,Grep,我正在尝试组合以下命令: docker ps | grep track 那会给我 6b86b28a27b0 dev/jobservice/worker-jobtracking:3.5.0-SNAPSHOT "/tini -- /startup/s…" 25 seconds ago Up 2 seconds (health: starting)

我正在尝试组合以下命令:

docker ps | grep track
那会给我

6b86b28a27b0        dev/jobservice/worker-jobtracking:3.5.0-SNAPSHOT   "/tini -- /startup/s…"   25 seconds ago      Up 2 seconds (health: starting)
                                                                                     jobservice_jobTrackingWorker_1
因此,我获取id并在下一个请求中使用它,如下所示:

docker logs 6b8 | grep -A 3 'info'
到目前为止,我能找到的最简单的方法是分别发送这些命令,但我想知道是否有一种简单的方法可以做到这一点

我认为这里的主要问题是,我试图根据容器名称的一部分来查找容器的名称

因此,为了继续,我想根据容器的名称查找并存储容器的id,然后使用它来查看其日志


谢谢

也许有更干净的方法,但这是可行的

要获取部分匹配的容器名称的ID,请执行以下操作:

$ docker ps --format "{{.ID}} {{.Names}}" | grep "partial" | cut -d " " -f1
然后可以在另一个bash命令中使用它:

$ docker logs $(docker ps --format "{{.ID}} {{.Names}}" | grep "partial" | cut -d " " -f1)
或者将其包装在函数中:

$ function dlog() { docker logs $(docker ps --format "{{.ID}} {{.Names}}" | grep "$1" | cut -d " " -f1); }
然后可以用作:

$ dlog partial

简而言之,实现您想要的目标的纯bash方法:

  • 对于sudo:

    sudo docker ps | grep -i track - | awk '{print $1}' | head -1 | xargs sudo docker logs
    
  • 没有sudo:

    docker ps | grep -i track - | awk '{print $1}' | head -1 | xargs docker logs
    
现在让我们把它分解一下

让我们看看我的笔记本电脑中运行了哪些用于Elixir编程语言的容器: 命令:

sudo docker ps | grep -i elixir - 
sudo docker ps | grep -i elixir - | awk '{print $1}'                                                                                                                                     
sudo docker ps | grep -i elixir - | awk '{print $1}' | head -1                         
sudo docker ps | grep -i elixir - | awk '{print $1}' | head -1 | xargs sudo docker logs
输出:

0a19c6e305a2        exadra37/phoenix-dev:1.5.3_elixir-1.10.3_erlang-23.0.2_git   "iex -S mix phx.serv…"   7 days ago          Up 7 days             127.0.0.1:2000-2001->2000-2001/tcp                                                                    Projects_todo-tasks_app
65ef527065a8        exadra37/st3-3211-elixir:latest                              "bash"                   7 days ago          Up 7 days                                                                                                                   SUBL3_1600981599
232d8cfe04d5        exadra37/phoenix-dev:1.5.3_elixir-1.10.3_erlang-23.0.2_git   "mix phx.server"         8 days ago          Up 8 days             127.0.0.1:4000-4001->4000-4001/tcp                                                                    Staging_todo-tasks_app
0a19c6e305a2
65ef527065a8
232d8cfe04d5
0a19c6e305a2
[info] | module=WebIt.Live.Calendar.Socket function=mount/1 line=14  | Mount Calendar for date: 2020-09-30 23:29:38.229174Z
[debug] | module=Tzdata.ReleaseUpdater function=poll_for_update/0 line=40  | Tzdata polling for update.
[debug] | module=Tzdata.ReleaseUpdater function=poll_for_update/0 line=44  | Tzdata polling shows the loaded tz database is up to date.

现在让我们查找他们的ID: 命令:

sudo docker ps | grep -i elixir - 
sudo docker ps | grep -i elixir - | awk '{print $1}'                                                                                                                                     
sudo docker ps | grep -i elixir - | awk '{print $1}' | head -1                         
sudo docker ps | grep -i elixir - | awk '{print $1}' | head -1 | xargs sudo docker logs
输出:

0a19c6e305a2        exadra37/phoenix-dev:1.5.3_elixir-1.10.3_erlang-23.0.2_git   "iex -S mix phx.serv…"   7 days ago          Up 7 days             127.0.0.1:2000-2001->2000-2001/tcp                                                                    Projects_todo-tasks_app
65ef527065a8        exadra37/st3-3211-elixir:latest                              "bash"                   7 days ago          Up 7 days                                                                                                                   SUBL3_1600981599
232d8cfe04d5        exadra37/phoenix-dev:1.5.3_elixir-1.10.3_erlang-23.0.2_git   "mix phx.server"         8 days ago          Up 8 days             127.0.0.1:4000-4001->4000-4001/tcp                                                                    Staging_todo-tasks_app
0a19c6e305a2
65ef527065a8
232d8cfe04d5
0a19c6e305a2
[info] | module=WebIt.Live.Calendar.Socket function=mount/1 line=14  | Mount Calendar for date: 2020-09-30 23:29:38.229174Z
[debug] | module=Tzdata.ReleaseUpdater function=poll_for_update/0 line=40  | Tzdata polling for update.
[debug] | module=Tzdata.ReleaseUpdater function=poll_for_update/0 line=44  | Tzdata polling shows the loaded tz database is up to date.

让我们获取第一个容器ID: 命令:

sudo docker ps | grep -i elixir - 
sudo docker ps | grep -i elixir - | awk '{print $1}'                                                                                                                                     
sudo docker ps | grep -i elixir - | awk '{print $1}' | head -1                         
sudo docker ps | grep -i elixir - | awk '{print $1}' | head -1 | xargs sudo docker logs
注意:将
头-1
替换为
头-2
,以获得输出中的第二行

输出:

0a19c6e305a2        exadra37/phoenix-dev:1.5.3_elixir-1.10.3_erlang-23.0.2_git   "iex -S mix phx.serv…"   7 days ago          Up 7 days             127.0.0.1:2000-2001->2000-2001/tcp                                                                    Projects_todo-tasks_app
65ef527065a8        exadra37/st3-3211-elixir:latest                              "bash"                   7 days ago          Up 7 days                                                                                                                   SUBL3_1600981599
232d8cfe04d5        exadra37/phoenix-dev:1.5.3_elixir-1.10.3_erlang-23.0.2_git   "mix phx.server"         8 days ago          Up 8 days             127.0.0.1:4000-4001->4000-4001/tcp                                                                    Staging_todo-tasks_app
0a19c6e305a2
65ef527065a8
232d8cfe04d5
0a19c6e305a2
[info] | module=WebIt.Live.Calendar.Socket function=mount/1 line=14  | Mount Calendar for date: 2020-09-30 23:29:38.229174Z
[debug] | module=Tzdata.ReleaseUpdater function=poll_for_update/0 line=40  | Tzdata polling for update.
[debug] | module=Tzdata.ReleaseUpdater function=poll_for_update/0 line=44  | Tzdata polling shows the loaded tz database is up to date.

让我们看看列表中第一个容器的日志 命令:

sudo docker ps | grep -i elixir - 
sudo docker ps | grep -i elixir - | awk '{print $1}'                                                                                                                                     
sudo docker ps | grep -i elixir - | awk '{print $1}' | head -1                         
sudo docker ps | grep -i elixir - | awk '{print $1}' | head -1 | xargs sudo docker logs
注意:
tail-1
替换
head-1
,以获取列表中最后一个容器的日志

输出:

0a19c6e305a2        exadra37/phoenix-dev:1.5.3_elixir-1.10.3_erlang-23.0.2_git   "iex -S mix phx.serv…"   7 days ago          Up 7 days             127.0.0.1:2000-2001->2000-2001/tcp                                                                    Projects_todo-tasks_app
65ef527065a8        exadra37/st3-3211-elixir:latest                              "bash"                   7 days ago          Up 7 days                                                                                                                   SUBL3_1600981599
232d8cfe04d5        exadra37/phoenix-dev:1.5.3_elixir-1.10.3_erlang-23.0.2_git   "mix phx.server"         8 days ago          Up 8 days             127.0.0.1:4000-4001->4000-4001/tcp                                                                    Staging_todo-tasks_app
0a19c6e305a2
65ef527065a8
232d8cfe04d5
0a19c6e305a2
[info] | module=WebIt.Live.Calendar.Socket function=mount/1 line=14  | Mount Calendar for date: 2020-09-30 23:29:38.229174Z
[debug] | module=Tzdata.ReleaseUpdater function=poll_for_update/0 line=40  | Tzdata polling for update.
[debug] | module=Tzdata.ReleaseUpdater function=poll_for_update/0 line=44  | Tzdata polling shows the loaded tz database is up to date.


结合不同的回复,我使用了:

function dlog(){docker ps | grep-i track-|awk'{print$1}}head-1 | xargs docker logs | grep-i-A 4“$2”}

为了两全其美。因此,我可以有一个函数,让我键入4个字母,而不是2个命令,并且不区分大小写

然后,我可以使用
dlog关键字
获取日志

我硬编码了track-a4,因为我通常使用该查询,但我可以将它们作为参数传递,以增加模块性(我的目标是非常简单)


谢谢你的帮助

工作得很好。需要注意的是--filter是区分大小写的,所以在我的例子中,我需要使用“Track”,而在docker ps|grep中,我也可以使用trackgreat。它消除了区分大小写的问题。如果我的答案有用的话,我会简单地删除sudo让它工作(我在Windows上),你可以投票给我。谢谢。嘿,我确实投票了,我可能还没有特权让他们出现,对不起,我希望投票否决我答案的用户能够解释我错在哪里。只有共享信息,我们才能相互学习:)这是Docker Compose托管容器吗?docker compose相当于使用compose服务名称的最有用的命令;您应该能够运行
docker compose logs jobTrackingWorker