Consider the command:
ls [OPTION]... [FILE]...
Options come first, and then comes the file. However, somehow, I have no idea why, ls
does not insists on this order. Therefore ls -la /home
and ls /home -la
produce identical output.
We can use this quirk to send options to a ls
that knows its [FILE]
argument.
FROM ubuntu:22.04
ENTRYPOINT ["ls", "/home"]
Then passing arguments is the same as passing options:
$ docker build -t test .
$ docker run test
$ docker run test -la
total 8
drwxr-xr-x 2 root root 4096 Apr 18 10:28 .
drwxr-xr-x 1 root root 4096 May 12 16:58 ..
However some programs insist on the order of options and arguments. For instance a .jar
with a Spring server application:
This works as intended:
java -jar -Dspring.profiles.active=ci backend.jar
This does not:
java -jar backend.jar -Dspring.profiles.active=ci
The [COMMAND]
and [ARG...]
in docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
seem to be appended to the entrypoint and not inserted.
Is there any way to pass options instead of arguments to a docker ENTRYPOINT
?
CodePudding user response:
Everything that you use as CMD
, may it be from the Dockerfile or when running the image, is passed to the ENTRYPOINT
as arguments.
You can create a more sophisticated entrypoint, preferable via script.
#!/usr/bin/env sh
exec java -jar $@ backend.jar
I am using $@
which are all the args passed to the script, effectively the CMD
.
Additionally, I am using exec
to make the final java
command run with process ID (pid) 1, so that it receives signals properly. For example SIGTERM
.
CodePudding user response:
Assuming you want to keep the java -jar backend.jar
part, you can add a tiny shell script that takes the arguments you put at the end and passes them before. See the selected answer here for details on how to do that
CodePudding user response:
You can use CMD
for this.
ENTRYPOINT java
CMD ["-jar", "-Dspring.profiles.active=ci", "backend.jar"]
This also allows you to change the parameters at runtime. E.g.
docker run <image> -jar -Dspring.profiles.active=debug backend.jar