[英]Run Multiple Main Methods from the same Dockerfile
我有一个大型 java 应用程序,在不同的类中有 5 个 Main 方法。 我想将此应用程序作为 docker 容器运行。 从DockerHub OpenJDK Image ,我按如下方式启动了我的 Dockerfile
FROM openjdk:latest
COPY . /usr/src/APP
WORKDIR /usr/src/APP`
我想添加几行来运行主要方法。 没有 Docker,我使用以下几行运行应用程序
echo 'Starting App'
nohup $JAVA_HOME/bin/java .:./App.jar path.to.main.class1 >>
/path/to/nohup/nohup.out 2>&1 &
nohup $JAVA_HOME/bin/java .:./App.jar path.to.main.class2 >>
/path/to/nohup/nohup.out 2>&1 &
nohup $JAVA_HOME/bin/java .:./App.jar path.to.main.class3 >>
/path/to/nohup/nohup.out 2>&1 &
nohup $JAVA_HOME/bin/java .:./App.jar path.to.main.class4 >>
/path/to/nohup/nohup.out 2>&1 &
nohup $JAVA_HOME/bin/java .:./App.jar path.to.main.class5 >>
/path/to/nohup/nohup.out 2>&1 &
echo 'App Started Successfully'`
是否可以在一个 docker 容器中运行上述场景? 如果可能,当ENTRYPOINT
只能有一个ENTRYPOINT
和CMD
指令时,如何做到这一点?
“如何从一个映像运行多个进程”的通常答案是运行多个容器。 鉴于您展示的 Dockerfile,这相当简单:
# Build the image (once)
docker build -t myapp .
# Then run the five containers as background processes
docker run -d --name app1 java .:./App.jar path.to.main.class1
docker run -d --name app2 java .:./App.jar path.to.main.class2
docker run -d --name app3 java .:./App.jar path.to.main.class3
docker run -d --name app4 java .:./App.jar path.to.main.class4
docker run -d --name app5 java .:./App.jar path.to.main.class5
由于所有命令都非常相似,您可以编写一个脚本来运行它们
#!/bin/sh
# Use the first command-line argument as the main class
MAIN_CLASS="$1"
shift
# Can also set JAVA_OPTS, other environment variables, ...
# Run the application
exec java -jar App.jar "path.to.main.$MAIN_CLASS" "$@"
将其复制到图像中
COPY run_main.sh /usr/local/bin
然后当您启动容器时,只需运行该包装器
docker run -d --name app1 run_main.sh class1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.