Ale*_*lls 8 docker dockerfile docker-build docker-entrypoint docker-run
假设我在 Dockerfile 中有这个:
ARG FOO=1
ENTRYPOINT ["docker.r2g", "run"]
Run Code Online (Sandbox Code Playgroud)
我用以下方法构建上述内容:
docker build -t "$tag" --build-arg FOO="$(date +%s)" .
Run Code Online (Sandbox Code Playgroud)
有没有办法做这样的事情:
ENTRYPOINT ["docker.r2g", "run", ARG FOO] // something like this
Run Code Online (Sandbox Code Playgroud)
我想这个论点也可以通过 withdocker run而不是在docker build阶段期间传递?
你可以在你的 Dockerfile 中结合 ARG 和 ENV,正如我在“ ARG 或 ENV,在这种情况下使用哪一个? ”
ARG FOO
ENV FOO=${FOO}
Run Code Online (Sandbox Code Playgroud)
这样,您docker.r2g就可以访问${FOO}环境变量。
我想这个论点也可以通过 docker run 而不是在 docker build 阶段传递?
这也是可能的,如果在运行时给 FOO 一个值更有意义:
docker run -e FOO=$(...) ...
Run Code Online (Sandbox Code Playgroud)
这个简单的技术对我有用:
FROM node:9
# ...
ENTRYPOINT dkr2g run "$dkr2g_run_args"
Run Code Online (Sandbox Code Playgroud)
然后我们启动容器:
docker run \
-e dkr2g_run_args="$run_args" \
--name "$container_name" "$tag_name"
Run Code Online (Sandbox Code Playgroud)
将环境变量传播到命令行参数中可能会出现一些边缘情况问题,但在大多数情况下应该可以工作。
ENTRYPOINT 可以像这样工作:
ENTRYPOINT ["foo", "--bar", "$baz"] # $baz will not be interpreted
Run Code Online (Sandbox Code Playgroud)
或者像这样:
ENTRYPOINT foo --bar $baz
Run Code Online (Sandbox Code Playgroud)
不知道为什么后者不是首选 - 但环境变量插值/解释只能使用后者。请参阅:如何在 ENTRYPOINT 数组中使用 Docker 环境变量?
然而,传递参数的更可靠的方法是使用$@环境变量来代替。所以你应该做的是使用docker run命令覆盖 --entrypoint,如下所示:
docker run --entrypoint="foo" <tag> --bar $@
Run Code Online (Sandbox Code Playgroud)
要了解如何正确覆盖入口点的正确语法,您必须查找它,当然,但总的来说,这很奇怪 - 您必须将 , 的参数放在标签名称--entrypoint="foo" 之前--entrypoint,并将,的参数放在标签名称之后。诡异的。
| 归档时间: |
|
| 查看次数: |
11904 次 |
| 最近记录: |