shell – 如何在“docker run container”上自动启动两个JAR
一旦通过run命令调用docker容器,我希望自动执行两个单独的JAR文件,因此当我输入docker run mycontainer时,它们都被调用.到目前为止,我有一个看起来像这样的dockerfile:
# base image is java:8 (ubuntu) FROM java:8 # add files to image ADD first.jar . ADD second.jar . # start on run CMD ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java","-jar","first.jar"] CMD ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java","second.jar"] 但是,这只会启动second.jar. 现在,两个罐子都是循环中的服务器,所以我想一旦启动它就会阻塞终端.如果我使用run -it mycontainer bash运行容器并手动调用它们,第一个将执行其输出而我无法启动另一个. 有没有办法打开不同的终端并在它们之间切换,让每个JAR在自己的上下文中运行?最好已经在dockerfile中. 我对ubuntu几乎一无所知但是我找到了打开一个新终端的xterm命令,但是在调用JAR之后这不起作用.我正在寻找的是dockerfile内部的指令,例如打开一个新终端,执行first.jar,alt-tab到旧终端并执行second.jar,或者至少实现相同. 谢谢! 解决方法
第二个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"] 使用泊坞窗时,它可能无法正常关闭,请参阅: 更好的方法 要解决这个问题,你可以使用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时正确关闭. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |