我已经构建了一个安装了 aws cli v1 和 v2 的映像。
现在,如果可能,我想docker run
设置一个默认的 aws cli 版本,并使用一个环境变量进行切换。
比如:
# docker run -ti --rm -e version=v2 awscli_image bash
$ which aws
/usr/local/bin/aws
# docker run -ti --rm -e version=v1 awscli_image bash
$ which aws
/usr/bin/aws
有什么建议可以使这项工作顺利进行吗?
所以问题变成了如何在运行的容器中调整 PATH
变量。这将是一个通用请求。
答案 0 :(得分:1)
解决此问题的最简单、最可靠的方法是维护两个单独的映像,每个版本的 CLI 工具一个。那么,$PATH
中哪个先出现就没有问题了,而且图像本身不会包含您未使用的工具版本。
docker run --rm awscli_image:v1 aws sts get-caller-identity
docker run --rm awscli_image:v2 aws sts get-caller-identity
如果它们确实必须在同一个映像中,您可以使用入口点包装器脚本来查看环境变量设置。如果您将图像的 ENTRYPOINT
设置为 shell 脚本 it will get passed the CMD
as arguments,并且脚本可以以 exec "$@"
结尾以实际运行 CMD
。
对于您的示例,您可以编写一个包装器,例如:
#!/bin/sh
# Push something on to $PATH depending on the environment
case "$version" in
v1) PATH="/usr/bin:$PATH" ;;
v2) PATH="/usr/local/bin:$PATH" ;;
esac
# Then run the CMD
exec "$@"
在您的 Dockerfile 中,COPY
此脚本正常并将其设置为 ENTRYPOINT
。
COPY entrypoint.sh /usr/local/bin
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] # must be JSON-array syntax
CMD ["aws", "--help"]