docker 从包含单引号的管道命令创建变量

up9lanfz  于 2022-11-22  发布在  Docker
关注(0)|答案(1)|浏览(113)

我尝试链接不同的命令来自动化一个普通的docker进程。这不是一个docker的事情,它更像是一个尝试在bash中自动化它的事情。
我可以运行:

docker ps | grep manager | cut -f -d ' '

其列出了当前的Docker容器,挑选出包含单词“manager”的一个,然后获取第一字段,其是容器ID,例如3A 5455 F3 AC 72,
我可以接着跑:

docker inspect -f'{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}} 3a5455f3ac72

获取Docker容器的IP地址,例如172.18.0.4
我想实现的是一个名为container_id的变量和一个名为container_IP的变量,我可以在bash脚本中使用它们。

container_id="docker ps | grep manager | cut -f 1 -d ' '"
container_ip='docker inspect -f'{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $container_id'

但是当我尝试创建container_id变量时,我得到:

invalid argument "1" for "-f, --filter" flag: bad format of filter (expected name=value)
See 'docker ps --help'.

我想我在如何使用单引号/双引号方面有一个错误,但我不知道我错在哪里。

e0bqpujr

e0bqpujr1#

您的代码可能如下所示:

container_id() {
   docker ps -f 'name=manager' --format '{{.ID}}'
}
container_ip() {
   local id
   id=$(container_id)
   docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$id"
}

container_ip

使用单引号/双引号时出错
引号在这里并不重要。不要将命令存储为字符串。使用函数来存储命令。记住用shellcheck检查你的脚本。另请参阅http://mywiki.wooledge.org/BashFAQ/050
从包含单引号的管道命令创建变量
要创建变量,请执行带有命令替换的命令。您可以只执行以下命令来代替函数:

container_id=$(docker ps | grep manager | cut -f 1 -d ' ')
container_ip=$(docker inspect -f'{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_id")
echo "$container_ip"

相关问题