Inf*_*ogy 4 containers makefile rm docker
docker命令“ docker container rm $(docker ps -aq) -f”可以从命令行正常运行。但是,当我尝试使用以下目标(“ remove_all_containers”)从makefile运行它时...
remove_all_containers:
docker container rm $(docker ps -aq) -f
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
host_name$ make remove_all_containers
docker container rm -f
"docker container rm" requires at least 1 argument.
See 'docker container rm --help'.
Usage: docker container rm [OPTIONS] CONTAINER [CONTAINER...]
Remove one or more containers
make: *** [remove_all_containers] Error 1
Run Code Online (Sandbox Code Playgroud)
显然,当从makefile中执行docker ps命令时,“ ”命令不能正确执行,因为它的结果可以被收集并传递到“ container rm”命令中。
我的问题:如何docker ps从makefile内正确运行命令,并将结果正确传递docker rm给makefile内的命令?
预先感谢您提供的任何帮助。
BMi*_*tch 12
听起来您在 docker 中没有任何容器可以删除。对于这种情况,我有时会使用不同的语法:
remove_all_containers:
docker container ls -aq | xargs --no-run-if-empty docker container rm -f
Run Code Online (Sandbox Code Playgroud)
docker container rm如果没有要删除的容器,则xargs 语法将不会运行。
您需要一秒钟$的食谱:
remove_all_containers:
docker container rm $$(docker ps -aq) -f
# ^
Run Code Online (Sandbox Code Playgroud)
$解析makefile时,该单身将作为makefile变量展开。它扩展为空白。因此docker container rm -f,使传递到您的外壳。第二个$符号使make扩展$$为$,它将传递docker container rm $(docker ps -aq) -f给bash,我猜这是您想要的。
请注意,如果shell按照@EricMd的建议将其放入其中,它将运行一个shell命令,但是该命令将在Makefile读取时间(而不是执行配方的时间)运行。如果该docker ps -aq命令依赖于构建中的任何其他工件,那么它将不起作用。
| 归档时间: |
|
| 查看次数: |
461 次 |
| 最近记录: |