datawire / forge

Define and run multi-container apps in Kubernetes
http://forge.sh
Apache License 2.0
416 stars 43 forks source link

Docker Rebuilder Doesn't Support Multi-stage Dockerfiles #154

Open plombardi89 opened 6 years ago

plombardi89 commented 6 years ago

I have a Dockerfile as such:

FROM openjdk:9-jdk-slim as build
MAINTAINER Philip Lombardi <plombardi@datawire.io>

ENV REDIS_VERSION=4.0.8

WORKDIR /srv-build
RUN apt-get update && apt-get install -y --no-install-recommends \
        curl \
        build-essential \
    && curl -O http://download.redis.io/releases/redis-${REDIS_VERSION}.tar.gz \
    && tar xvzf redis-${REDIS_VERSION}.tar.gz \
    && cd redis-${REDIS_VERSION} \
    && make install \
    && cd ..

COPY . .
RUN redis-server --daemonize yes \
    && ./gradlew test fatJar

FROM openjdk:9-jdk-slim as runtime
MAINTAINER Philip Lombardi <plombardi@datawire.io>

WORKDIR /srv
COPY --from=build /srv-build/build/libs/kubernaut-controller-fat.jar .

ENTRYPOINT ["java"]
CMD ["-jar", "kubernaut-controller-fat.jar"]

I have the rebuilder configured as such:

containers:
  - dockerfile: Dockerfile
    context: .
    rebuild:
      root: /srv-build
      command: ./gradlew test fatJar
      sources:
        - build.gradle
        - settings.gradle
        - gradle.properties
        - gradlew
        - src

I get the following error because (I think) Forge doesn't know what stage to run the command in

BUILD SUCCESSFUL in 1m 14s
║ 6 actionable tasks: 6 executed
║ Removing intermediate container 8cbbfc2e886f
║  ---> 32430fd07293
║ Step 8/13 : FROM openjdk:9-jdk-slim as runtime
║  ---> e1401b3f24d0
║ Step 9/13 : MAINTAINER Philip Lombardi <plombardi@datawire.io>
║  ---> Using cache
║  ---> 8499c3ef6c4d
║ Step 10/13 : WORKDIR /srv
║  ---> Using cache
║  ---> fd079bffe7f8
║ Step 11/13 : COPY --from=build /srv-build/build/libs/kubernaut-controller-fat.jar .
║  ---> 2bad6ed897bd
║ Step 12/13 : ENTRYPOINT ["java"]
║  ---> Running in 9c9993549d1d
║ Removing intermediate container 9c9993549d1d
║  ---> af3ead6336ec
║ Step 13/13 : CMD ["-jar", "kubernaut-controller-fat.jar"]
║  ---> Running in ac972f7720d8
║ Removing intermediate container ac972f7720d8
║  ---> cd7bb99a5e64
║ Successfully built cd7bb99a5e64
║ Successfully tagged 914373874199.dkr.ecr.us-east-1.amazonaws.com/kubernaut-controller:9ccf45f823da85eee6bced8798755d0e995cae16.sha
║ docker run --rm --name forge_kubernaut-controller_c44641a5c623294bbc4fa57fa02ce91890f8f34e -dit --entrypoint /bin/sh 914373874199.dkr.ecr.us-east-1.amazonaws.com/kubernaut-controller:9ccf45f823da85eee6bced8798755d0e995cae16.sha
║ 66f45d20f51fdf354329afdc7256cfd7a53a0fb2d8dead21de619f68fce34176
║ docker exec -i 66f45d20f51fdf354329afdc7256cfd7a53a0fb2d8dead21de619f68fce34176 mkdir -p /srv-build
║ docker cp /home/plombardi/work/kubernaut-controller/build.gradle 66f45d20f51fdf354329afdc7256cfd7a53a0fb2d8dead21de619f68fce34176:/srv-build/build.gradle
║ docker cp /home/plombardi/work/kubernaut-controller/settings.gradle 66f45d20f51fdf354329afdc7256cfd7a53a0fb2d8dead21de619f68fce34176:/srv-build/settings.gradle
║ docker cp /home/plombardi/work/kubernaut-controller/gradle.properties 66f45d20f51fdf354329afdc7256cfd7a53a0fb2d8dead21de619f68fce34176:/srv-build/gradle.properties
║ docker cp /home/plombardi/work/kubernaut-controller/gradlew 66f45d20f51fdf354329afdc7256cfd7a53a0fb2d8dead21de619f68fce34176:/srv-build/gradlew
║ docker exec -i 66f45d20f51fdf354329afdc7256cfd7a53a0fb2d8dead21de619f68fce34176 rm -rf /srv-build/src
║ docker cp /home/plombardi/work/kubernaut-controller/src 66f45d20f51fdf354329afdc7256cfd7a53a0fb2d8dead21de619f68fce34176:/srv-build/src
║ docker exec -i 66f45d20f51fdf354329afdc7256cfd7a53a0fb2d8dead21de619f68fce34176 /bin/sh -c ./gradlew test fatJar
║ /bin/sh: 1: ./gradlew: not found
║ 32 tasks run, 1 errors
║   kubernaut-controller: command 'docker exec -i 66f45d20f51fdf354329afdc7256cfd7a53a0fb2d8dead21de619f68fce34176 /bin/sh -c ./gradlew test fatJar' failed[127]: /bin/sh: 1: ./gradlew: not found