这个简单的技术对我有用:
FROM node:9
# ...
ENTRYPOINT dkr2g run "$dkr2g_run_args"
然后我们启动容器:
docker run \
-e dkr2g_run_args="$run_args" \
--name "$container_name" "$tag_name"
将环境变量传播到命令行参数中可能存在一些边缘情况问题,但在大多数情况下应该可以工作。
ENTRYPOINT 可以像这样工作:
ENTRYPOINT ["foo", "--bar", "$baz"] # $baz will not be interpreted
或者像这样:
ENTRYPOINT foo --bar $baz
不知道为什么后者不是首选 - 但环境变量插值/解释只能使用后者。请参阅:如何在 ENTRYPOINT 数组中使用 Docker 环境变量?
但是,传递参数的一种更强大的方法是使用$@
而不是 env 变量。所以你应该做的是使用docker run
命令覆盖 --entrypoint ,如下所示:
docker run --entrypoint="foo" <tag> --bar $@
要了解如何正确覆盖入口点的正确语法,您必须查看它,这是肯定的,但通常这很奇怪 - 您必须在标签名称--entrypoint="foo"
之前--entrypoint
放置标签名称,并将参数放在标签名称之后。奇怪的。