Azure / draft-classic

A tool for developers to create cloud-native applications on Kubernetes.
https://draft.sh
MIT License
3.93k stars 397 forks source link

Command in the Dockerfile for a Java application #727

Open arun-gupta opened 6 years ago

arun-gupta commented 6 years ago

The command in the Dockerfile generated for a Java project is:

CMD ["/bin/bash", "-c", "find -type f -name '*.jar' | xargs java -jar"]

Depending upon what kind of Java application is being used, the target directory could have a large number of JAR files. For example, for the sample application at https://github.com/arun-gupta/microservices-greeting, the list of generated JARs is:

./target/greeting/WEB-INF/lib/aopalliance-repackaged-2.5.0-b42.jar
./target/greeting/WEB-INF/lib/asm-6.0.jar
./target/greeting/WEB-INF/lib/asm-commons-6.0.jar
./target/greeting/WEB-INF/lib/asm-tree-6.0.jar
./target/greeting/WEB-INF/lib/aws-java-sdk-core-1.11.321.jar
./target/greeting/WEB-INF/lib/aws-lambda-java-core-1.2.0.jar
./target/greeting/WEB-INF/lib/aws-serverless-java-container-core-1.0.jar
./target/greeting/WEB-INF/lib/aws-serverless-java-container-jersey-1.0.jar
./target/greeting/WEB-INF/lib/aws-xray-recorder-sdk-core-1.2.1.jar
./target/greeting/WEB-INF/lib/bootstrap-2018.2.0.jar
./target/greeting/WEB-INF/lib/commons-codec-1.9.jar
./target/greeting/WEB-INF/lib/commons-fileupload-1.3.3.jar
./target/greeting/WEB-INF/lib/commons-io-2.2.jar
./target/greeting/WEB-INF/lib/commons-logging-1.1.3.jar
./target/greeting/WEB-INF/lib/config-api-1.2.0.jar
./target/greeting/WEB-INF/lib/config-api-runtime-1.2.0.jar
./target/greeting/WEB-INF/lib/container-2018.2.0.jar
./target/greeting/WEB-INF/lib/ee-2018.2.0.jar
./target/greeting/WEB-INF/lib/elytron-2018.2.0.jar
./target/greeting/WEB-INF/lib/hk2-api-2.5.0-b42.jar
./target/greeting/WEB-INF/lib/hk2-locator-2.5.0-b42.jar
./target/greeting/WEB-INF/lib/hk2-utils-2.5.0-b42.jar
./target/greeting/WEB-INF/lib/httpasyncclient-4.1.1.jar
./target/greeting/WEB-INF/lib/httpclient-4.5.2.jar
./target/greeting/WEB-INF/lib/httpcore-4.4.4.jar
./target/greeting/WEB-INF/lib/httpcore-nio-4.4.4.jar
./target/greeting/WEB-INF/lib/httpmime-4.5.2.jar
./target/greeting/WEB-INF/lib/io-2018.2.0.jar
./target/greeting/WEB-INF/lib/ion-java-1.0.2.jar
./target/greeting/WEB-INF/lib/jackson-annotations-2.8.4.jar
./target/greeting/WEB-INF/lib/jackson-core-2.9.4.jar
./target/greeting/WEB-INF/lib/jackson-databind-2.8.4.jar
./target/greeting/WEB-INF/lib/jackson-dataformat-cbor-2.6.7.jar
./target/greeting/WEB-INF/lib/jackson-jaxrs-base-2.8.9.jar
./target/greeting/WEB-INF/lib/jackson-jaxrs-json-provider-2.8.9.jar
./target/greeting/WEB-INF/lib/jackson-module-jaxb-annotations-2.8.4.jar
./target/greeting/WEB-INF/lib/jandex-2.0.4.Final.jar
./target/greeting/WEB-INF/lib/javassist-3.22.0-CR2.jar
./target/greeting/WEB-INF/lib/javax.annotation-api-1.2.jar
./target/greeting/WEB-INF/lib/javax.el-impl-3.0.1-b08-jbossorg-1.jar
./target/greeting/WEB-INF/lib/javax.inject-1.jar
./target/greeting/WEB-INF/lib/javax.inject-2.5.0-b42.jar
./target/greeting/WEB-INF/lib/javax.servlet-api-3.1.0.jar
./target/greeting/WEB-INF/lib/javax.ws.rs-api-2.1.jar
./target/greeting/WEB-INF/lib/jaxrs-2018.2.0.jar
./target/greeting/WEB-INF/lib/jaxrs-cdi-2018.2.0.jar
./target/greeting/WEB-INF/lib/jboss-annotations-api_1.2_spec-1.0.0.Final.jar
./target/greeting/WEB-INF/lib/jboss-concurrency-api_1.0_spec-1.0.0.Final.jar
./target/greeting/WEB-INF/lib/jboss-el-api_3.0_spec-1.0.9.Final.jar
./target/greeting/WEB-INF/lib/jboss-interceptors-api_1.2_spec-1.0.0.Final.jar
./target/greeting/WEB-INF/lib/jboss-jaxrs-api_2.0_spec-1.0.0.Final.jar
./target/greeting/WEB-INF/lib/jboss-logging-3.3.1.Final.jar
./target/greeting/WEB-INF/lib/jboss-modules-1.6.1.Final.jar
./target/greeting/WEB-INF/lib/jboss-servlet-api_3.1_spec-1.0.0.Final.jar
./target/greeting/WEB-INF/lib/jboss-websocket-api_1.1_spec-1.1.1.Final.jar
./target/greeting/WEB-INF/lib/jersey-client-2.26.jar
./target/greeting/WEB-INF/lib/jersey-common-2.26.jar
./target/greeting/WEB-INF/lib/jersey-entity-filtering-2.26.jar
./target/greeting/WEB-INF/lib/jersey-hk2-2.26.jar
./target/greeting/WEB-INF/lib/jersey-media-jaxb-2.26.jar
./target/greeting/WEB-INF/lib/jersey-media-json-jackson-2.26.jar
./target/greeting/WEB-INF/lib/jersey-server-2.26.jar
./target/greeting/WEB-INF/lib/joda-time-2.8.1.jar
./target/greeting/WEB-INF/lib/json-20160212.jar
./target/greeting/WEB-INF/lib/logging-2018.2.0.jar
./target/greeting/WEB-INF/lib/meta-spi-2018.2.0.jar
./target/greeting/WEB-INF/lib/naming-2018.2.0.jar
./target/greeting/WEB-INF/lib/osgi-resource-locator-1.0.1.jar
./target/greeting/WEB-INF/lib/request-controller-2018.2.0.jar
./target/greeting/WEB-INF/lib/security-2018.2.0.jar
./target/greeting/WEB-INF/lib/shrinkwrap-api-1.2.6.jar
./target/greeting/WEB-INF/lib/shrinkwrap-descriptors-api-base-2.0.0.jar
./target/greeting/WEB-INF/lib/shrinkwrap-descriptors-api-javaee-2.0.0.jar
./target/greeting/WEB-INF/lib/shrinkwrap-descriptors-api-jboss-2.0.0.jar
./target/greeting/WEB-INF/lib/shrinkwrap-descriptors-impl-base-2.0.0.jar
./target/greeting/WEB-INF/lib/shrinkwrap-descriptors-impl-javaee-2.0.0.jar
./target/greeting/WEB-INF/lib/shrinkwrap-descriptors-impl-jboss-2.0.0.jar
./target/greeting/WEB-INF/lib/shrinkwrap-descriptors-spi-2.0.0.jar
./target/greeting/WEB-INF/lib/shrinkwrap-impl-base-1.2.6.jar
./target/greeting/WEB-INF/lib/shrinkwrap-spi-1.2.6.jar
./target/greeting/WEB-INF/lib/slf4j-api-1.7.5.jar
./target/greeting/WEB-INF/lib/slf4j-jdk14-1.7.5.jar
./target/greeting/WEB-INF/lib/snakeyaml-1.17.jar
./target/greeting/WEB-INF/lib/spi-2018.2.0.jar
./target/greeting/WEB-INF/lib/undertow-2018.2.0.jar
./target/greeting/WEB-INF/lib/undertow-core-1.4.18.Final.jar
./target/greeting/WEB-INF/lib/undertow-servlet-1.4.18.Final.jar
./target/greeting/WEB-INF/lib/unirest-java-1.4.9.jar
./target/greeting/WEB-INF/lib/validation-api-1.1.0.Final.jar
./target/greeting/WEB-INF/lib/xnio-api-3.3.8.Final.jar
./target/greeting/WEB-INF/lib/xnio-nio-3.3.8.Final.jar
./target/greeting-swarm.jar

The command will try to execute each and every JAR file which is not the intent of the application. The command generation needs to be more context-sensitive and generate.

Identified during hacking with @michelleN at #KubeCon