2016-09-23 441 views
1

在docker build期间,我需要运行一个bash脚本,它设置了一些环境变量。在docker build期间执行配置bash脚本

脚本看起来是这样的:

#!/bin/bash 

export ENVVAR=TEST 
export HOST=local 
export PORT=port 

我尝试调用这个脚本在我以不同的方式dockerfile但他们没有在工作。我试过这些:

ADD ./myscript.sh 
RUN chmod +x /myscript.sh;\ 
    /bin/bash -c 'source ./myscript.sh';\ 
    /bin/bash -c 'source /myscript.sh';\ 
    /bin/bash -c source ./myscript.sh;\ 
    /bin/bash -c source /myscript.sh;\ 
    source ./myscript.sh;\ 
    source /myscript.sh;\ 
    /myscript.sh;\ 
    ./myscript.sh;\ 

ENTRYPOINT ["/bin/bash"] 

当然,我在RUN中只有这些命令中的一个,我只是把它们分组在这里。

如果我运行容器并使用source ./myscript.sh它按预期工作。

由于多重限制和其他原因,我不可能使用docker compose,-e参数,dockerfile中的ENV KEY VALUE或类似的方法。我需要在docker构建过程中设置环境变量。

回答

1

你根本就没有找到在你的ENTRYPOINT中指定的shell。只需将您的myscript.sh添加到图像中(使用COPY而不是ADD)。

COPY myscript.sh /usr/local/bin 

然后将它源于您的入口点实际启动的shell。

docker run myimage source /usr/local/bin/myscript.sh 

btw,myscript.sh是非常不具说明性的。你可以使用env.sh作为例子。

+0

谢谢,但我能做些什么,如果我有一个额外的运行后的shell脚本取决于设置的环境变量? 'RUN/configure.sh' < - 这取决于事先设置的环境变量。让他们不在一起是因为孤立和结构的原因。 – sceiler

+1

然后在运行configure.sh之前获取您的shell。例如:'RUN源myscript.sh && configure.sh' – Alkaline