第二条 CMD 指令取代了第一条指令,因此您需要对这两个命令使用一条指令。
简单(不太好)的方法
您可以添加一个 bash 脚本,在第二个脚本上执行命令和块:
# start.sh
/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar first.jar &
/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar second.jar
然后将 Dockerfile 更改为:
# base image is java:8 (ubuntu)
FROM java:8
# add files to image
ADD first.jar .
ADD second.jar .
ADD start.sh .
# start on run
CMD ["bash", "start.sh"]
使用时docker stop
它可能无法正常关闭,请参阅:https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/ https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/
更好的方法
为了解决这个问题,你可以使用 Phusion:https://hub.docker.com/r/phusion/baseimage/ https://hub.docker.com/r/phusion/baseimage/
它有一个比例如更容易使用的初始化系统。主管。
这是一个很好的起点:https://github.com/phusion/baseimage-docker#getting_started https://github.com/phusion/baseimage-docker#getting_started
phusion使用说明
遗憾的是,没有适用于 Ubuntu 14.04 LTS 的官方 openjdk-8-jdk。您可以尝试使用非官方 ppa,它在以下说明中使用。
在您的情况下,您需要 bash 脚本(其作用类似于“服务”):
# start-first.sh (the file has to start with the following line!):
#!/bin/bash
usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar /root/first.jar
# start-second.sh
#!/bin/bash
usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar /root/second.jar
你的 Dockerfile 看起来像这样:
# base image is phusion
FROM phusion/baseimage:latest
# Use init service of phusion
CMD ["/sbin/my_init"]
# Install unofficial openjdk-8
RUN add-apt-repository ppa:openjdk-r/ppa && apt-get update && apt-get dist-upgrade -y && apt-get install -y openjdk-8-jdk
ADD first.jar /root/first.jar
ADD second.jar /root/second.jar
# Add first service
RUN mkdir /etc/service/first
ADD start-first.sh /etc/service/first/run
RUN chmod +x /etc/service/first/run
# Add second service
RUN mkdir /etc/service/second
ADD start-second.sh /etc/service/second/run
RUN chmod +x /etc/service/second/run
# Clean up
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
这应该安装两个服务,它们将在启动时运行并在使用时正确关闭docker stop
.