Итак, у меня есть протестированная команда сборки 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)