在启动之前在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;"]
但泊坞窗容器仍然关闭。有什么我失踪?
答
nginx容器已经定义了入口点。如果你还定义了CMD,它将把它们组合成'入口点CMD',这样CMD就成为入口点的参数。这就是为什么你需要重新定义入口点才能使之工作。
通常ENTRYPOINT是这样定义的,如果你也传递CMD,它将由ENTRYPOINT脚本执行。但是,每个容器都可能不是这种情况。
你可能真的不想要'-e'。你也可能想'RUN'而不是'CMD',所以'RUN/usr/share/nginx/html/runfile.sh'? –
但是我想从码头运行命令中传递一个值,有没有比-e更好的方法? 我曾考虑 '搬运工运行-p 8000:80 missioncontrol:最新/斌/庆典-c “/usr/share/nginx/html/runfile.sh OPENAM”' 但Web服务器没有启动然后 – chiloutus
我在谈论sed命令。 :P –