我正在尝试将我的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脚本。
答案 0 :(得分:1)
它将创建一个容器,但当我执行
时,它将显示退出docker ps
这意味着您启动服务器的脚本...确实会立即退出。
由于该脚本是容器的主要入口点,因此,如果脚本停止并退出,则所有容器都将停止并退出。
作为主要前台进程,您需要确保脚本启动服务器,然后等待。 (例如using supervisor)