如果 Makefile 中的语句检测 docker 图像存在,如果存在则将其删除
If statement inside of Makefile to detect docker image exist and if so delete it
我在 Makefile 中有一个简单的 if 语句,表示删除 docker 图像(如果它存在但不起作用)。注意日志文件中的图像存在,但是当我执行 make clean
if statement fails.
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
日志(注意图像存在但 if make clean
内的语句失败):
➜ 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 中有一个简单的 if 语句,表示删除 docker 图像(如果它存在但不起作用)。注意日志文件中的图像存在,但是当我执行 make clean
if statement fails.
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
日志(注意图像存在但 if make clean
内的语句失败):
➜ 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),)