linux - 创建 Docker 镜像时 Makefile 错误

标签 linux docker makefile gnu-make

我正在尝试使用 Makefile 创建 Docker 镜像并遵循我的 Makefile 中的内容

NAME   := bluehubs/bluehubs
TAG    := $(shell git log -1 --pretty=%H)
IMG    := ${NAME}:${TAG}
LATEST := ${NAME}:latest

build:
    $(info $$IMG is [${IMG}])
    $(info $$LATEST is [${LATEST}])
    docker build -t ${IMG} .

它抛出如下所示的错误:

$IMG is [bluehubs/bluehubs:9e8c3566e19cc86fb74b246dee86421a3f6d32bc]
$LATEST is [bluehubs/bluehubs:latest]
make: *** No rule to make target '9e8c3566e19cc86fb74b246dee86421a3f6d32bc', needed by 'build'.  Stop.

最佳答案

可能您的 make 目标命令 build: 没有使用 Tab 缩进,而是使用空格缩进。这是 Makefile 的常见错误,但在这种特殊情况下,错误消息有点奇怪。

线条

$(info ...)

似乎在用空格缩进时有效,但是行

docker build -t ${IMG} .

未正确缩进的内容被扩展为

docker build -t bluehubs/bluehubs:9e8c3566e19cc86fb74b246dee86421a3f6d32bc .

这导致定义目标 dockerbuild-tbluehubs/bluehubs 的规则依赖于 9e8c3566e19cc86fb74b246dee86421a3f6d32bc

由于 build 是您的默认目标,make 会检查它的依赖项 9e8c3566e19cc86fb74b246dee86421a3f6d32bc,但未找到。

要解决此问题,您必须确保配方中的每一行,即要执行的命令,必须以制表符 字符开头

Tab 之后是否有空格并不重要,但是您应该使用具有 Makefile 特殊模式的编辑器,或者至少显示是否行以空格或 Tab 缩进。

为了避免 Makefile 中的错误,我建议根本不要使用空格进行缩进。

关于linux - 创建 Docker 镜像时 Makefile 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54987796/

相关文章:

linux - 文件系统 "see"是否作为(非常大的)字节数组存储设备?

linux - debian linux sed无法正确地附加字符串/单词

tomcat7 - 无法在CoreOS上的容器内将Tomcat 7作为服务运行

docker - Liberty Admin Center 将 Docker 服务器显示为正在运行,而它没有

makefile - 为什么 "make"在 "make install"之前

c - 自动将您自己的代码插入到另一个项目中

regex - Diff - 排除不区分大小写的模式

linux - inotifywait 报告要创建的文件甚至在创建之前就被删除了

visual-studio - Visual Studio 正在删除我在 docker.compose.vs.debug.g.yml 中添加的环境变量

c - 如何将 Yacc/Bison-Parser 包含到自己的项目中?