首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Makefile中的空“码头图像”

Makefile中的空“码头图像”
EN

Stack Overflow用户
提问于 2017-11-11 02:03:59
回答 1查看 880关注 0票数 2

我有一个Makefile和一些基本的docker命令:

代码语言:javascript
复制
all: build                                                                                           

build:                                                                                               
    docker build .                                                            

DOCKER_CONTAINERS=$(docker ps -a -q)                                                                 
DOCKER_IMAGES=$(docker images -q)                                                                 

clean:                                                                                               
ifdef $(DOCKER_CONTAINERS)                                                                           
    @echo "Stopping Docker containers..."                                                            
    docker stop $(DOCKER_CONTAINERS)                                                                 
    @echo "Deleting Docker containers..."                                                            
    docker rm $(DOCKER_CONTAINERS)                                                                   
endif                                                                                                

iclean:                                                                                            
ifdef $(DOCKER_IMAGES)                                                                               
    @echo "Deleting Docker images..."                                                                
    docker rmi $(DOCKER_IMAGES)                                                                      
endif

我想用最后一个来清理现有的图像,我确实有一些图像:

代码语言:javascript
复制
$ docker images -q
aaa5a74f6006
099dec0df83b
c9889c81a971
bddca31db222
d85328b9bf58
dd6f76d9cc90

但是,在规则中似乎没有定义DOCKER_IMAGES (稍后我通过显示它来检查它):

代码语言:javascript
复制
$ make iclean
make: Nothing to be done for 'iclean'.

它在clean中运行得很好。

代码语言:javascript
复制
$ make clean
Stopping Docker containers...
docker stop $(docker ps -a -q)
f33d30ddc991
35d4d9262460
9ac0507e0b7b
59ff62aa1c0a
2d623e844c23
cb013d3919f4
Deleting Docker containers...
docker rm $(docker ps -a -q)
f33d30ddc991
35d4d9262460
9ac0507e0b7b
59ff62aa1c0a
2d623e844c23
cb013d3919f4

我在这里做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-11 07:25:07

我看到两个潜在的问题:

  1. $(docker images -q)调用make docker函数..。这并不存在。这将计算为空字符串,即使您有docker图像。使用: DOCKER_IMAGES =$(外壳码头映像-q)
  2. 显然,ifdef不像您想象的那样工作: ifdef $(DOCKER_IMAGES) 展开变量$(DOCKER_IMAGES),然后测试命名为展开结果的变量是否有值。不是你想要的。你可以用: ifdef DOCKER_IMAGES 而不是。但这不是一个很好的主意,因为DOCKER_IMAGES的值可能只是空白。您需要的是测试$(DOCKER_IMAGES)是否为空字符串。使用: ifneq ( $(DOCKER_IMAGES)) 注意,$(strip...)很重要,它删除了前导和尾随空格,这样如果$(DOCKER_IMAGES)只包含空白,测试就不会通过。

有关正在运行的容器的代码的相同注释。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47233626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档