在 bash 脚本中执行 docker 命令时出现问题

Issue in executing docker command in bash script

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

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

错误:

 docker exec requires at least two arguments

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

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

进一步说明,您不需要 sudo 权限即可 运行 docker ps ...

此外,您永远不需要将 grep 通过管道传输到 awk 中,因为 awk 可以为您完成此操作:

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

此外,考虑到 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