我在 Makefile 中有一个简单的 if 语句,表示删除 docker 镜像(如果存在),但它不起作用。请注意,日志文件中图像存在,但是当我执行 make clean
if 语句失败时。
NAME=program1
all: .docker-build
docker run ${NAME} make all
.docker-build:
docker build . -t ${NAME}
@echo "" > .docker-build
run-%: .docker-build
docker run ${NAME} make $*
clean:
ifeq ($(docker images -q ${NAME} 2> /dev/null), "")
docker image rm -f ${NAME}
endif
@rm -f .docker-build
日志(注意图像存在,但 make clean
内的 if 语句失败):
➜ dockerfile-test docker images -q program1 2> /dev/null
5ee4797b91ad
➜ dockerfile-test make clean
rm -f .docker-build
最佳答案
这个:
ifeq ($(docker images -q ${NAME} 2> /dev/null), "")
扩展名为docker images -q program1 2>/dev/null
的make变量,该变量不存在,因此扩展为空字符串,然后将其与两个字符的字符串进行比较""
并且它永远不会匹配。
您的意思可能是:
ifeq ($(shell docker images -q ${NAME} 2> /dev/null),)
关于makefile - Makefile 中的 if 语句用于检测 docker 镜像是否存在,如果存在则将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70228203/