I have a SBT multi project where I have 2 different play applications. I want to create 2 docker outputs not just 1.
In my build.sbt file I have some docker settings, but when I run the docker task it doesn't use any of these settings as the DockerFile doesn't have any of the things I configured.
My build.sbt looks like:
lazy val project1 = (project in file("project1")).
..
.enablePlugins(...., DockerPlugin)
lazy val project2 = (project in file("project2")).
..
.enablePlugins(...., DockerPlugin)
// docker
maintainer in Docker := "mr. docker"
dockerExposedPorts := Seq(9000)
dockerBaseImage := "java:latest"
I run the task by first going into my specific project:
project project2
docker:stage
The generated docker file in target/docker/Dockerfile is:
FROM java:latest
WORKDIR /opt/docker
ADD opt /opt
RUN ["chown", "-R", "daemon:daemon", "."]
USER daemon
ENTRYPOINT ["bin/project1"]
CMD []
As you can see it is missing what I put in my build.sbt. It should have lines for the maintainer and exposed ports.
How can I fix this problem?
Docker settings have to be set per sub-project:
lazy val server = Project("server")
.enablePlugins(DockerPlugin)
.settings(dockerBaseImage := "openjdk:8-jdk")
.settings(dockerRepository := Some("registry.gitlab.com"))
.settings(dockerExposedPorts := Seq(8080))
Having project defined as above, you can publish docker image with following command:
sbt server/docker:publishLocal