在启动之前在NGINX泊坞窗容器中运行bash脚本

问题描述:

我试图在使用docker的localhost:8000上运行javascript应用程序。我想做的一部分是根据docker run命令交换一些配置文件,我想将一个环境变量传递到容器中,以便bash脚本可以使用它作为参数。在启动之前在NGINX泊坞窗容器中运行bash脚本

什么我dockerfile正在寻找类似的是:

FROM nginx 
COPY . /usr/share/nginx/html 
CMD ["bash","/usr/share/nginx/html/runfile.sh"] 

而且bash脚本是这样的:

#!/bin/bash 
if [ "$SECURITY_VERSION" = "OPENAM" ]; then 
    sed -i -e 's/localhost/openam/g' authConfig.js 
fi 

docker run -p 8000:80 missioncontrol:latest -e SECURITY_VERSION="TEST" 

码头工人给了我一个异常说找不到-e exec命令。

但是,如果我更改dockerfile使用ENTRYPOINT而不是CMD,-e标志有效,但Web服务器不启动。

有什么我在这里失踪?入口点被重写或什么?

编辑:

所以我已经更新了我dockerfile使用ENTRYPOINT ["bash","/usr/share/nginx/html/runfile.sh", ";", " nginx -g daemon off;"]

但泊坞窗容器仍然关闭。有什么我失踪?

+1

你可能真的不想要'-e'。你也可能想'RUN'而不是'CMD',所以'RUN/usr/share/nginx/html/runfile.sh'? –

+0

但是我想从码头运行命令中传递一个值,有没有比-e更好的方法? 我曾考虑 '搬运工运行-p 8000:80 missioncontrol:最新/斌/庆典-c “/usr/share/nginx/html/runfile.sh OPENAM”' 但Web服务器没有启动然后 – chiloutus

+0

我在谈论sed命令。 :P –

nginx容器已经定义了入口点。如果你还定义了CMD,它将把它们组合成'入口点CMD',这样CMD就成为入口点的参数。这就是为什么你需要重新定义入口点才能使之工作。

通常ENTRYPOINT是这样定义的,如果你也传递CMD,它将由ENTRYPOINT脚本执行。但是,每个容器都可能不是这种情况。

+0

是的,这是我的怀疑,我可能需要看看nginx文档,看看我能否找到它们使用的入口点 – chiloutus

+0

因此,我更新了我的dockerfile使用 'ENTRYPOINT [“bash”,“/ usr/share/nginx/html/runfile.sh”,“;”,“nginx -g守护进程关闭;”]' 但码头容器仍然关闭下。有什么我失踪? – chiloutus