如何配置Docker容器使其直接将参数传递给可执行文件?
配置Docker实现直接传递参数给CLI工具
你需要通过ENTRYPOINT和CMD的组合来实现这个需求,以下是具体方案:
问题原因
你之前用CMD ["bash", "foo-cli"]的配置会报错,是因为当你执行docker run -t foo "--help"时,Docker会把"--help"替换掉CMD里的第一个参数(也就是bash),尝试直接执行--help这个"命令",自然找不到对应的可执行文件,所以抛出路径错误。
解决方案
方案1:直接指定ENTRYPOINT为CLI工具(推荐)
如果foo-cli已经在容器的$PATH中,直接用ENTRYPOINT固定执行程序,CMD设置默认参数:
ENTRYPOINT ["foo-cli"] CMD ["--help"] # 可选,当不传递任何参数时,默认执行foo-cli --help
这样执行docker run -t foo "--help"时,Docker会把"--help"作为参数传递给ENTRYPOINT指定的foo-cli,最终执行foo-cli --help,就能得到预期的yay it works输出。
方案2:通过bash中转(适用于需要shell环境的场景)
如果foo-cli依赖shell环境才能运行,可通过bash -c的方式传递参数:
ENTRYPOINT ["bash", "-c", "foo-cli \"$@\"", "--"] CMD ["--help"]
这里的"--"是让bash将后续所有参数都传给$@,确保你通过docker run传递的参数能正确传递给foo-cli。
验证效果
执行以下命令:
docker run -t foo "--help"
会输出:
yay it works
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

