在 bash 脚本中执行 docker 命令的问题

问题描述

我有以下 bash 脚本代码尝试通过 bash 脚本运行 docker 容器,但我正在检索错误

#!/bin/bash
name=sudo docker ps | grep 'test' | awk '{print 
$1}'
sudo docker exec -it $name bash

错误

 docker exec requires at least two arguments

解决方法

假设您有一个实际上称为 test running 的 docker 容器,则获取 id 的方式是不正确的。为了将命令扩展为变量,它需要包含在 $() 中,因此:

#!/bin/bash
name=$(docker ps | grep 'test' | awk '{print $1}')
sudo docker exec -it $name bash

另外要注意的是,您不需要 sudo 权限即可运行 docker ps ...

此外,您永远不需要通过管道将 grep 导入 awk,因为 awk 可以为您执行此操作:

name=$(docker ps | awk '/test/ {print $1}')

此外,考虑到 docker-ps 内置的本机功能,根本不需要管道,因此:

name=$(docker ps -q -f name=test)

这将仅打印名为 test 的容器的容器 ID。我假设这里的名称是 test 但它可能是其他名称,即名为 test 的标签,在这种情况下,过滤器需要更改:

 -f,--filter=[]
      Filter output based on these conditions:
      - exited=<int> an exit code of <int>
      - label=<key> or label=<key>=<value>
      - status=(created|restarting|running|paused|exited|dead)
      - name=<string> a container's name
      - id=<ID> a container's ID
      - before=(<container-name>|<container-id>)
      - since=(<container-name>|<container-id>)
      - ancestor=(<image-name>[:tag]|<image-id>|  â¨image@digestâ©)  -  conâ
   tainers created from an image or a descendant.
      - volume=(<volume-name>|<mount-point-destination>)
      -  network=(<network-name>|<network-id>)  -  containers connected to
   the provided network