考虑以下Dockerfile
:
FROM ubuntu:xenial-20170802
RUN (echo '#!/bin/bash'; echo 'echo "args: $@"') > /run.sh && chmod a+x /run.sh
ENTRYPOINT /run.sh
使用Docker 1.12.6(在Ubuntu Zesty主机上,如果重要),如果我
docker build -t entrypoint-test .
docker run --rm entrypoint-test a b c
我得到了
args:
换句话说,$@
无效。但是,这似乎表明shell脚本本身没问题:
docker run --rm --entrypoint /bin/bash entrypoint-test /run.sh a b c
制造
args: a b c
正如所料。更奇怪的是,
docker run --rm --entrypoint /run.sh entrypoint-test a b c
的工作原理。请注意,与原始命令相比,除了使用相同值的ENTRYPOINT
覆盖--entrypoint
指令外,我什么都不做。那么为什么会这样呢?
我在docs中看不到任何暗示argv在某些情况下会是空白的内容,可能涉及#!
个可执行脚本。
添加
cat /proc/$$/cmdline
到shell脚本确认除非使用--entrypoint
,否则不会传递参数:
/bin/bash^@/run.sh^@a^@b^@c^@
VS
/bin/bash^@/run.sh^@
答案 0 :(得分:2)
https://serverfault.com/a/647790/144361指出了我正确的方向。 These docs明确指出“shell表单”不接受参数。以下语法有效:
ENTRYPOINT ["/run.sh"]