我正在尝试使用 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 .
这导致定义目标 docker
、build
、-t
和 bluehubs/bluehubs
的规则依赖于 9e8c3566e19cc86fb74b246dee86421a3f6d32bc
和 。
由于 build
是您的默认目标,make
会检查它的依赖项 9e8c3566e19cc86fb74b246dee86421a3f6d32bc
,但未找到。
要解决此问题,您必须确保配方中的每一行,即要执行的命令,必须以制表符 字符开头。
在 Tab 之后是否有空格并不重要,但是您应该使用具有 Makefile 特殊模式的编辑器,或者至少显示是否行以空格或 Tab 缩进。
为了避免 Makefile 中的错误,我建议根本不要使用空格进行缩进。
关于linux - 创建 Docker 镜像时 Makefile 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54987796/