我有一个docker镜像,我想在本地运行,为了让我的生活更容易,我使用make file来传递AWS环境变量。
aws_access_key_id := $(shell aws configure get aws_access_key_id)
aws_secret_access_key := $(shell aws configure get aws_secret_access_key)
aws_region := $(shell aws configure get region)
docker-run:
docker run -e AWS_ACCESS_KEY_ID="$(aws_access_key_id)" -e AWS_SECRET_ACCESS_KEY="$(aws_secret_access_key)" -e AWS_DEFAULT_REGION="$(aws_region)" --rm mydocker-image我需要找到一种方法在我的终端中做这样的事情
make docker-run -d my_db -s dev -t my_table -u my_user -i URI://redshift
make docker-run --pre-actions "delete from dev.my_table where first_name = 'John'" -s dev -t my_table
make docker-run -s3 s3://temp-parquet/avro/ -s dev -t my_table -u myuser -i URI://redshift这些是我的docker (带有argparse的python应用程序)将接受的参数。
发布于 2021-01-16 05:47:29
你不能直接这么做。make的命令行参数由make解析,并且必须是有效的make程序命令行参数。Makefile不是shell脚本,make也不是通用的解释器:没有向它传递任意选项的工具。
您可以通过将它们放入一个变量中来完成此操作,如下所示:
make docker-run DOCKER_ARGS="-d my_db -s dev -t my_table -u my_user -i URI://redshift"
make docker-run DOCKER_ARGS="-d my_db -s dev -t my_table"然后在makefile中使用$(DOCKER_ARGS)。但这是唯一的办法。
发布于 2021-01-16 08:34:21
如果你想自己做参数解析,你可能不需要Makefile!您可能应该编写一个Bash脚本。
示例:
#!/usr/bin/env bash
set -euo pipefail
aws_access_key_id="$(aws configure get aws_access_key_id)"
aws_secret_access_key="$(aws configure get aws_secret_access_key)"
aws_region="$(aws configure get region)"
docker run -e AWS_ACCESS_KEY_ID="$aws_access_key_id" -e AWS_SECRET_ACCESS_KEY="$aws_secret_access_key" -e AWS_DEFAULT_REGION="$aws_region" --rm mydocker-imagedocker "$@"注意末尾的$@,它将参数从Bash传递给docker命令。
发布于 2021-01-16 06:01:01
你可能想试试这样的方法:
$ cat Makefile
all:
@echo make docker-run -d my_db -s dev -t my_table $${MYUSER+-u "$(MYUSER)"} $${URI+-i "URI://$(URI)"}
$ make
make docker-run -d my_db -s dev -t my_table
$ make MYUSER=myuser URI=redshift
make docker-run -d my_db -s dev -t my_table -u myuser -i URI://redshifthttps://stackoverflow.com/questions/65743946
复制相似问题