使用Java应用程序和Web服务器运行Docker容器不起作用

使用Java应用程序和Web服务器运行Docker容器不起作用,java,node.js,docker,Java,Node.js,Docker,我是docker的新手,我正在尝试创建一个运行多个服务的容器, 使用此文档: 我已经设法在containe上安装了Java和Nodejs,最终导致在Dockerfile的末尾作为入口点运行此脚本: #/bin/bash #开始第一个过程 /tmp/cliffer/bin/startup.sh& 状态=$? 如果[$status-ne 0];然后 echo“无法启动我的第一个\u进程:$status” 退出$status fi #开始第二个过程 npm启动& 状态=$? 如果[$status-n

我是docker的新手,我正在尝试创建一个运行多个服务的容器, 使用此文档:

我已经设法在containe上安装了Java和Nodejs,最终导致在Dockerfile的末尾作为入口点运行此脚本:

#/bin/bash
#开始第一个过程
/tmp/cliffer/bin/startup.sh&
状态=$?
如果[$status-ne 0];然后
echo“无法启动我的第一个\u进程:$status”
退出$status
fi
#开始第二个过程
npm启动&
状态=$?
如果[$status-ne 0];然后
echo“无法启动我的第二个\u进程:$status”
退出$status
fi
#NaiveCheck每分钟运行一次检查,以查看其中一个进程是否已退出。
#这说明了如果你想跑步,你需要做的部分举重动作
#容器中有多个服务。容器将退出并出现错误
#如果它检测到其中一个进程已退出。
#否则它将永远循环,每60秒醒来一次
while/bin/true;做
进程1_状态=$(ps aux | grep-q my | U first |进程grep-v grep)
进程2_状态=$(ps aux | grep-q my | U第二进程| grep-v grep)
#如果上面的grep找到任何东西,它们将以0状态退出
#如果它们不是都是0,那么就有问题了
如果[$PROCESS_1_STATUS-ne 0-o$PROCESS_2_STATUS-ne 0];然后
echo“其中一个进程已退出。”
出口-1
fi
睡60

完成
Docker需要一个进程在前台运行,否则将退出。前台程序是您的入口点,休眠60秒并检查两个进程是否仍在后台

检查过程名称“my_first_process”。对于您的实例,应该是类似于“java”的

所以不是

ps aux |grep -q my_first_process |grep -v grep
ps aux |grep -q my_second_process |grep -v grep
试一试


Joel的评论仍然有效,为您的用例运行两个不同的docker容器更有意义。

没有回答您的问题,但值得一提的是,通常建议每个容器运行一个服务,如果您想要多个服务,可以使用docker compose。也就是说,当你说它们单独工作很好时,是不是与bash脚本的入口点相同?或者直接指向“npm start”?第一个服务监视进入Web服务器的数据包,这就是为什么在2中运行它可能不起作用的原因。您可以监视内部docker网络、链接docker容器或使用公共卷,但如果您的两个进程显然属于同一个容器,则可以将它们放在一个容器中。
ps aux |grep -q java |grep -v grep
ps aux |grep -q npm |grep -v grep