javascript – 在NGINX docker容器中启动之前运行bash脚本

我正在尝试使用docker在localhost:8000上运行一个 javascript应用程序.我想做的部分是基于docker run命令交换一些配置文件,我想将环境变量传递到容器中,以便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"

Docker给了我一个例外,说找不到-e exec命令.

但是,如果我将dockerfile更改为使用ENTRYPOINT而不是CMD,则-e标志有效,但Web服务器无法启动.

这里有什么我想念的吗? ENTRYPOINT是否被覆盖?

编辑:

所以我更新了我的dockerfile以使用ENTRYPOINT [“bash”,“/usr/share / Nginx / html / runfile.sh”,“;”,“Nginx -g daemon off;”]

但是Docker的容器仍然关闭.有什么我想念的吗?

解决方法

Nginx容器已经定义了ENTRYPOINT.如果你定义了CMD,它将把它们组合起来,就像’ENTRYPOINT CMD’一样,CMD成为ENTRYPOINT的参数.这就是为什么你需要重新定义ENTRYPOINT以使其正常工作.

通常ENTRYPOINT以这种方式定义,如果你也传递CMD,它将由ENTRYPOINT脚本执行.然而,每个容器可能不是这种情况.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...