Сборка Docker завершается неудачно при выполнении в Makefile - PullRequest
0 голосов
/ 08 марта 2019

Итак, у меня есть протестированная команда сборки Docker, которая прекрасно работает

docker build -t app --no-cache --network host --build-arg ssh_private_key="$(cat ~/.ssh/id_rsa)" --build-arg python_version="3.6.8" -f Dockerfile .

Чтобы облегчить работу команды по изучению Docker, я инкапсулировал несколько команд - build, start, stop - в Makefile. Однако в Makefile мне нужно немного изменить команду, изменив

$(cat ~/.ssh/id_rsa)

до

$(shell cat ~/.ssh/id_rsa)

Когда я выполняю следующее:

make build

Я получаю следующее сообщение:

Step 13/20 : RUN git clone --depth 1 "${git_user}@${git_host}:${git_repo}" app
---> Running in d2eb41a71315
Cloning into 'app'...
Warning: Permanently added the ECDSA host key for IP address [ip_address] to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

Однако у меня нет той же проблемы при выполнении из командной строки. Я думаю, что это как-то связано с тем, как вызывается команда "cat", но я не знаю, как ее решить.

Есть идеи?

Makefile:

APP_NAME=ccs_data_pipeline
DATA?="${HOME}/data"
DOCKER_FILE=Dockerfile
PYTHON_VERSION?=3.6.8
SRC?=$(shell dirname `pwd`)
PRIVATE_KEY?=$(shell echo $(shell cat ~/.ssh/id_rsa))

.PHONY: help

help: ## Display this help message
    @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)     

build: ## Build container for ccs data pipeline
    docker build -t $(APP_NAME) --no-cache --network host --build-arg ssh_private_key="$(PRIVATE_KEY)" --build-arg python_version="$(PYTHON_VERSION)" -f $(DOCKER_FILE) .

start: ## Start the docker container
    docker run -it -v $(DATA):/data --network host --rm --name="$(APP_NAME)" $(APP_NAME)

stop: ## Stop the docker container
    docker stop $(APP_NAME); docker rm $(APP_NAME)

1 Ответ

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

Пожалуйста, покажите ваш фактический make-файл или, по крайней мере, все правило, в котором есть ошибка.Одной введенной вами команды без контекста недостаточно, чтобы понять, что вы делаете или что может быть не так.

Обратите внимание, что часто некорректно заменять операцию оболочки, такую ​​как $(...), наКоманда make shell $(shell ...).Однако иногда это работает «случайно», когда реальные различия между этими командами не имеют значения.

В общем, вы никогда не должны использовать $(shell ...) внутри рецепта (я понятия не имею, если этокоманда появляется в рецепте).Вместо этого вам следует избегать всех знаков доллара, которые вы хотите дословно передать оболочке, когда он запускает ваш рецепт:

$$(cat ~/.ssh/id_rsa)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...