问题描述
我有以下 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