当我们运行docker映像时,如何从该映像运行shell脚本

当我们运行docker映像时,如何从该映像运行shell脚本,docker,dockerfile,Docker,Dockerfile,我正在尝试对我的web应用程序进行dockerize。在docker文件中,我从gitlab中提取代码,然后在代码容器中安装节点模块。 创建映像后,我将尝试运行docker image来创建容器,在其中,我必须在从映像创建容器后立即运行shell脚本 FROM alpine LABEL MAINTAINER "CoE" WORKDIR / ARG proxy ARG username ARG pswd RUN export http_proxy=$proxy

我正在尝试对我的web应用程序进行dockerize。在docker文件中,我从gitlab中提取代码,然后在代码容器中安装节点模块。 创建映像后,我将尝试运行docker image来创建容器,在其中,我必须在从映像创建容器后立即运行shell脚本

FROM alpine

LABEL MAINTAINER "CoE"
WORKDIR /

ARG proxy
ARG username
ARG pswd

RUN export http_proxy=$proxy                                                                    && \
    export https_proxy=$proxy                                                                   && \
    git clone -b master https://$username:$pswd@git.devops.company.net/dlr_ui         && \
    npm install                     

 EXPOSE 14001 14002 14003 14004 14005 14006 14007 14008
 WORKDIR /applications/package/ui_servers 
CMD [./startUIServer]
建立:

docker build --no-cache --build-arg proxy=$http_proxy --build-arg username=abcd --build-arg pswd=12123%4022121 -t ui2 .
然后运行:

docker run -d -it -p 14001:14001 -p 14002:14002 -p 14003:14003 -p 14004:14004 -p 14005:14005 -p 14006:14006 -p 14007:14007 -p 14008:14008 --name=uistart ui2  /bin/sh
它将创建一个容器,但当我这样做时,它将显示退出

当我查看docker日志时

docker logs
它什么也看不出来

如何运行该脚本,以便在docker运行时所有UI服务器都将启动。我不想执行
docker exec-it ui启动/bin/sh
,然后手动运行shell脚本

它将创建一个容器,但当我执行
docker ps

这意味着您的脚本正在启动服务器。。。他会马上离开

由于该脚本是容器的主要入口点,因此如果它停止并退出,则所有容器都停止并退出


您需要确保脚本启动服务器,然后等待,作为一个主要的前台进程。(例如)

为什么要将
/bin/sh
作为参数传递给run命令?指定运行脚本ad sh,该脚本存在于/bin中。但我使用的是nohup sh runorg1.sh>。/logs/org1_ui.log&nohup sh runorg2.sh>。/logs/org2_ui.log我认为不应该退出该命令。@ShalabhNegi尝试按中所示启动它们。但是最好的做法仍然是使用supervisord:我已经尝试了所有这些方法,但没有任何效果:CMD[“永远”,“开始”,“Core.js”]CMD[“/startUIServer.sh”]CMD[“节点”,“Core.js”,“org1”,“14001”]CMD[“节点”,“Core.js”,“org1”,“14004”]CMD[/startUIServer.sh]CMD[“/bin/bash”,“startUIServer.sh”]CMD[“sh”、“/startUIServer.sh”]CMD[“/bin/sh/applications/package/ui_servers/startUIServer.sh”]CMD sh./startUIServer.sh CMD[sh./startUIServer.sh CMD/bin/sh./startUIServer.sh CMD[“nohup”、“sh”、“/startUIServer.sh”]运行。/startUIServer。sh@ShalabhNegi我同意。你能和主管试一下吗?(这意味着是主管在前台运行,启动您想要的任何进程,然后等待)
docker logs