Ошибка Makefile при создании образа Docker - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь создать образ Docker, используя Makefile и следуя по содержимому моего 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.

1 Ответ

0 голосов
/ 04 марта 2019

Вероятно, команды для вашей целевой команды build: не имеют отступа Tab , но с пробелами.Это обычная ошибка в Makefiles, но в этом особом случае сообщение об ошибке немного странное.

Строки

$(info ...)

, кажется, работают, когда с отступом пробелы, но строка

docker build -t ${IMG} .

, который не имеет правильного отступа, расширен до

docker build -t bluehubs/bluehubs:9e8c3566e19cc86fb74b246dee86421a3f6d32bc .

, что приводит к правилу, которое определяет цели docker, build, -t и bluehubs/bluehubs длязависит от 9e8c3566e19cc86fb74b246dee86421a3f6d32bc и .

Поскольку build является вашей целью по умолчанию, make проверяет ее зависимость 9e8c3566e19cc86fb74b246dee86421a3f6d32bc, которая не найдена.

Чтобы устранить проблему, вынеобходимо убедиться, что каждая строка в рецепте, т.е. команды, которые нужно выполнить, должна начинаться с символа Tab .

Неважно, есть ли у вас пробелы после a Tab , но вы должны использовать редактор, который имеет специальный режим для Makefiles или который по крайней мере показывает, еслистрока с отступом или пробелом Tab .

Чтобы избежать ошибок в Makefiles, я рекомендую вообще не использовать пробелы для отступов.

...