当我们运行Docker镜像时如何从该镜像运行Shell脚本

时间:2019-01-18 06:05:30

标签: docker dockerfile

我正在尝试将我的Web应用程序码头化。在我的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 ps -a

当我查看docker日志时

docker logs

它什么也不会显示

  

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

1 个答案:

答案 0 :(得分:1)

  

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

时,它将显示退出

这意味着您启动服务器的脚本...确实会立即退出。

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

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