如何通过docker run将parameter passing给Shell脚本
我是docker世界的新手。 我必须调用一个shell脚本,通过docker容器接受命令行参数。 例如:我的shell脚本如下所示:
#!bin/bash echo $1
Dockerfile看起来像这样:
FROM ubuntu:14.04 COPY ./file.sh / CMD /bin/bash file.sh
我不知道如何在运行容器时传递参数
@ user1801934,你确定@Gilles Quenot的答案是正确的吗?
把arg1直接放入Dockerfile,是你的要求吗?
这是我的答案。
更新file.sh
#!/usr/bin/env bash echo $1
使用现有的Dockerfile
build立图像:
docker build -t test .
用参数abc
或xyz
或别的东西运行图像。
docker run -ti test /file.sh abc docker run -ti test /file.sh xyz
使用Docker,传递这种信息的正确方法是通过环境variables。
因此,使用相同的Dockerfile,将脚本更改为
#!/bin/bash echo $FOO
构build完成后,使用以下docker命令:
docker run -e FOO="hello world!" test
在file.sh
使用这个脚本
#!/bin/bash echo Your container args are: "$@"
和这个Dockerfile
FROM ubuntu:14.04 COPY ./file.sh / ENTRYPOINT ["/file.sh"] CMD []
你应该能够:
% docker build -t test . % docker run test hello world Your container args are: hello world
我有一个脚本文件,实际上运行的东西。 这个脚本文件可能比较复杂。 我们称之为“run_container”。 该脚本从命令行获取参数:
run_container p1 p2 p3
一个简单的run_container可能是:
#!/bin/bash echo "argc = ${#*}" echo "argv = ${*}"
我想要做的是,在“dockering”之后,我希望能够使用docker命令行上的参数启动此容器,如下所示:
docker run image_name p1 p2 p3
并以p1 p2 p3作为参数运行run_container脚本。
这是我的解决scheme:
Dockerfile:
FROM docker.io/ubuntu ADD run_container / ENTRYPOINT ["/bin/bash", "-c", "/run_container ${*}", "--"]
如果你想运行它@build时间:
CMD /bin/bash /file.sh arg1
如果你想运行它@run时间:
ENTRYPOINT ["/bin/bash"] CMD ["/file.sh", "arg1"]
然后在主机shell
docker build -t test . docker run -i -t test