In my springboot project, there are three configuration files
application.yml --> used in local development
application-test.yml --> running in a test environment
application-prod.yml --> running in a production environment
pom.xml
...
<properties>
    <docker-repository>self-ip:port</docker-repository>
</properties>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>jib-maven-plugin</artifactId>
            <version>1.7.0</version>
            <configuration>
                <allowInsecureRegistries>true</allowInsecureRegistries>
                <from>
                    <image>openjdk:8-jre-alpine</image>
                </from>
                <to>
                    <image>${docker-repository}/${project.groupId}/${project.artifactId}</image>
                </to>
                <container>
                    <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
                    <jvmFlags>
                        <jvmFlag>$JAVA_OPTS</jvmFlag>
                        <jvmFlag>-Dfile.encoding=UTF-8</jvmFlag>
                        <jvmFlag>-XX:+UseG1GC</jvmFlag>
                        <jvmFlag>-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/var/log/gc.log</jvmFlag>
                        <jvmFlag>-Djava.security.egd=file:/dev/./urandom</jvmFlag>
                    </jvmFlags>
                </container>
            </configuration>
        </plugin>
    </plugins>
</build>
And then push to my self private docker repository, It's OK
mvn -DsendCredentialsOverHttp=true jib:build
Running on different machines
# On my test machine, I want to run like this
docker run --name test-xxx -d \
    -p 8080:8080 -p 9080:9080 \
    -e JAVA_OPTS="-Xms256m -Xmx256m -Dspring.profiles.active=test -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9080" \
    -v ~/logs:/logs \
    self-ip:port/xxx/yyy
# on my production machine, I want to run like this
docker run --name prod-xxx -d \
    -p 8080:8080 \
    -e JAVA_OPTS="-server -Xms1G -Xmx1G -Dspring.profiles.active=prod" \
    -v /mnt/logs:/logs \
    self-ip:port/xxx/yyy
When I running on test machine, It's fail
docker container ls -al
CONTAINER ID    IMAGE   COMMAND                  CREATED         STATUS                     PORTS    NAMES
XXXXXXXXXXXX    xxx     "java $JAVA_OPTS -Df…"   3 seconds ago   Exited (1) 2 seconds ago            test-xxx
My expectation is this
# test machine
java -Xms256m -Xmx256m -Dspring.profiles.active=test \
    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9080 \
    -Dfile.encoding=UTF-8 -XX:+UseG1GC -verbose:gc \
    -XX:+PrintGCDetails -XX:+PrintGCDateStamps \
    -XX:+PrintGCTimeStamps -Xloggc:/logs/gc.log \
    -Djava.security.egd=file:/dev/./urandom \
    -cp /app/resources:/app/classes:/app/libs/* \
    xxx.yyy.MainClass
# production machine
java -server -Xms1G -Xmx1G -Dspring.profiles.active=prod \
    -Dfile.encoding=UTF-8 -XX:+UseG1GC -verbose:gc \
    -XX:+PrintGCDetails -XX:+PrintGCDateStamps \
    -XX:+PrintGCTimeStamps -Xloggc:/logs/gc.log \
    -Djava.security.egd=file:/dev/./urandom \
    -cp /app/resources:/app/classes:/app/libs/* \
    xxx.yyy.MainClass
How should I configure it? container --> environment or dockerClient --> environment?
I have not found any relevant examples in the documentation, They are all just a sentence
update 1
Hi @Haran  I modified <jvmFlag>$JAVA_OPTS</jvmFlag> to JAVA_TOOL_OPTS and repush
and run on test
docker container rm test-xxx
docker run --name test-xxx -d \
    -p 8080:8080 \
    -e "JAVA_TOOL_OPTIONS=-Xms256m -Xmx256m -Dspring.profiles.active=test -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9080" \
    ip:port/xx/yy
It's also running fail
$ docker container ls -al
CONTAINER ID    IMAGE   COMMAND                       CREATED         STATUS                     PORTS    NAMES
XXXXXXXXXXXX    xxx     "java $JAVA_TOOL_OPTS -Df…"   3 seconds ago   Exited (1) 2 seconds ago            test-xxx
and then I remove $JAVA_TOOL_OPTS and repeat the above repush and docker rm & run, running succesfull, but no customize enviroment
$ docker exec -it test-xxx ps auxf
PID   USER     TIME  COMMAND
    1 root      0:05 java -Dfile.encoding=UTF-8 -XX:+UseG1GC -verbose:gc -XX:+P
   59 root      0:00 ps auxf
$ docker ps --no-trunc
CONTAINER ID    IMAGE  COMMAND                                                                                                                                                                                                                                              CREATED             STATUS              PORTS                    NAMES
xx              yy     "java -Dfile.encoding=UTF-8 -XX:+UseG1GC '-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/logs/gc.log' -Djava.security.egd=file:/dev/./urandom -cp /app/resources:/app/classes:/app/libs/* xx.yy.MainClass"   34 seconds ago      Up 34 seconds       0.0.0.0:8080->8080/tcp   test-xxx
update 2
The quotation mark for the docker -e ... command is no different between inside and outside.
$ docker run --name test-xxx -d -p 8080:8080 \
    -e JAVA_TOOL_OPTIONS="-Xms256m -Xmx256m -Dspring.profiles.active=test -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9080" \
    ip:port/xx/yy
xxxxx
$ docker exec -it test-xxx env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin
HOSTNAME=4a7c5045109b
TERM=xterm
JAVA_TOOL_OPTIONS=-Xms256m -Xmx256m -Dspring.profiles.active=test -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9080
JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre
JAVA_VERSION=8u212
JAVA_ALPINE_VERSION=8.212.04-r0
LANG=C.UTF-8
HOME=/root
$ docker run --name test-xxx1 -d -p 8081:8080 \
    -e "JAVA_TOOL_OPTIONS=-Xms256m -Xmx256m -Dspring.profiles.active=test -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9080" \
    ip:port/xx/yy
xxxx
$ docker exec -it test-xxx1 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin
HOSTNAME=ae333ad8836f
TERM=xterm
JAVA_TOOL_OPTIONS=-Xms256m -Xmx256m -Dspring.profiles.active=test -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9080
JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre
JAVA_VERSION=8u212
JAVA_ALPINE_VERSION=8.212.04-r0
LANG=C.UTF-8
HOME=/root
$ docker ps --no-trunc         
CONTAINER ID    IMAGE           COMMAND                                                                                                                                                                                                                                               CREATED             STATUS              PORTS                    NAMES
xxx             ip:port/xx/yy   "java -Dfile.encoding=UTF-8 -XX:+UseG1GC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/var/log/gc.log -Djava.security.egd=file:/dev/./urandom -cp /app/resources:/app/classes:/app/libs/* xx.yy.MainClass"   3 minutes ago       Up 3 minutes        0.0.0.0:8081->8080/tcp   test-xxx1
xx              ip:port/xx/yy   "java -Dfile.encoding=UTF-8 -XX:+UseG1GC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/var/log/gc.log -Djava.security.egd=file:/dev/./urandom -cp /app/resources:/app/classes:/app/libs/* xx.yy.MainClass"   3 minutes ago       Up 3 minutes        0.0.0.0:8080->8080/tcp   test-xxx