如何通过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 . 

用参数abcxyz或别的东西运行图像。

 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