这完全可能的。问题是你试图直接执行命令。相反,你需要做的是,创建一个entrypoint.sh
并让它执行。该脚本可以根据环境变量确定需要执行的操作。
考虑以下Dockerfile
FROM centos:7.2.1511
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["this","is", "tarun"]
和entrypoint.sh
的内容是如下
#!/usr/bin/env sh
_load() {
CMD=""
if [ ! -z "$ENTRYPOINT" ]; then
CMD=$ENTRYPOINT
fi
if [ "$#" -gt 0 ]; then
CMD="$CMD [email protected]"
elif [ ! -z $COMMAND ]; then
CMD="$CMD $COMMAND"
fi
echo "Executing - $CMD"
exec $CMD
}
_load [email protected]
该脚本只是检查是否有环境变量$ENTRYPOINT
或$COMMAND
传递,或两者都通过,或从码头运行命令通过。基于以下优先顺序运行命令
- 入口点+运行参数 - 合并两组,并执行
- 入口点+ COMMAND - 合并两组,并执行
- MISSING $ COMMAND - 运行$入口点
- MISSING $入口点 - 运行$ COMMAND
我们测试它
$ docker run -e ENTRYPOINT=/bin/echo test my name "is XYZ"
Executing - /bin/echo my name is XYZ
my name is XYZ
脚本可能不是100%完美,但我刚刚创建它来验证这个想法
如果你需要一个简单的entrypoint.sh
,那么你甚至可以与下面的内容
exec $ENTRYPOINT [email protected]
这也将更换工作。
可能[我们可以在通过dockerfile构建docker镜像时通过cmd行传递ENV变量吗?](https://stackoverflow.com/questions/31198835/can-we-pass-env-variables-through-cmd-line-while -bui lding-a-docker-image-through) – MatTheWhale