我是码头工人的新手。我必须调用一个shell脚本,它通过docker容器接受命令行参数。 示例:我的shell脚本看起来像:

#!bin/bash
echo $1

Dockerfile是这样的:

FROM ubuntu:14.04
COPY ./file.sh /
CMD /bin/bash file.sh

我不确定在运行容器时如何传递参数


当前回答

我所拥有的是一个实际运行的脚本文件。这个票据文件可能相对复杂。让我们称它为“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脚本。

这是我的解决方案:

Dockerfile:

FROM docker.io/ubuntu
ADD run_container /
ENTRYPOINT ["/bin/bash", "-c", "/run_container \"$@\"", "--"]

其他回答

在Docker中,传递这类信息的正确方法是通过环境变量。

因此,使用相同的Dockerfile,将脚本更改为

#!/bin/bash
echo $FOO

构建完成后,使用以下docker命令:

docker run -e FOO="hello world!" test

使用相同的file.sh

#!/bin/bash
echo $1

使用现有的Dockerfile构建映像:

docker build -t test .

使用abc或xyz或其他参数运行图像。

docker run -ti --rm test /file.sh abc

docker run -ti --rm test /file.sh xyz

我所拥有的是一个实际运行的脚本文件。这个票据文件可能相对复杂。让我们称它为“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脚本。

这是我的解决方案:

Dockerfile:

FROM docker.io/ubuntu
ADD run_container /
ENTRYPOINT ["/bin/bash", "-c", "/run_container \"$@\"", "--"]

另一种选择……

为了让它起作用

docker run -d --rm $IMG_NAME "bash:command1&&command2&&command3"

在dockerfile

ENTRYPOINT ["/entrypoint.sh"]

在entrypoint.sh

#!/bin/sh

entrypoint_params=$1
printf "==>[entrypoint.sh] %s\n" "entry_point_param is $entrypoint_params"

PARAM1=$(echo $entrypoint_params | cut -d':' -f1) # output is 1 must be 'bash' it     will be tested    
PARAM2=$(echo $entrypoint_params | cut -d':' -f2) # the real command separated by     &&

printf "==>[entrypoint.sh] %s\n" "PARAM1=$PARAM1"
printf "==>[entrypoint.sh] %s\n" "PARAM2=$PARAM2"

if [ "$PARAM1" = "bash" ];
then
    printf "==>[entrypoint.sh] %s\n" "about to running $PARAM2 command"
    echo $PARAM2 | tr '&&' '\n' | while read cmd; do
        $cmd
    done    
fi

使用file.sh中的这个脚本

#!/bin/bash
echo Your container args are: "$@"

还有这个Dockerfile

FROM ubuntu:14.04
COPY ./file.sh /
ENTRYPOINT ["/file.sh"]

你应该能够:

% docker build -t test .
% docker run test hello world
Your container args are: hello world