因为放入容器的app I的bin名称可以更改(docker build是更大版本的一部分,并且我很容易将正确的名称从一个版本传递到另一个版本)我想做某事像这样:
ENTRYPOINT $PATH_TO_BIN
但是由于没有shell来评估,这通常会失败。从理论上讲,我可以选择
run
但在这种情况下,我在执行FragmentActivity
时无法传递任何参数。
是否有可能在构建期间使用exec表单并评估args或env变量(因此在运行时不需要shell?)
答案 0 :(得分:1)
如果您使用的是最新版本的Docker Engine,可以在Dockerfile中添加:
ARG PATH_TO_BIN
然后执行此操作:
docker build --build-arg PATH_TO_BIN=/usr/bin/
了解详情
答案 1 :(得分:0)
这很有可能。问题是你试图直接执行命令。相反,你需要做的是,创建一个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 $@"
elif [ ! -z $COMMAND ]; then
CMD="$CMD $COMMAND"
fi
echo "Executing - $CMD"
exec $CMD
}
_load $@
该脚本除了检查环境变量$ENTRYPOINT
或$COMMAND
是否已通过,或者两者都已通过,或者是否已通过docker run命令时,都会执行任何操作。根据以下优先顺序,它运行命令
现在测试一下
$ 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 $@
这也行得通。