Java Docker组合JVM参数

Java Docker组合JVM参数,java,docker,docker-compose,Java,Docker,Docker Compose,我编写了一个java应用程序,它使用一个环境变量,该环境变量使用一个参数为JWT令牌salt密钥设置一个密钥。我有没有办法在Docker Compose中传递命令变量 java -Djava.security.egd=file:/dev/./urandom -jar /user-profile-api.jar --key=blah 要运行docker映像,您只需 docker run -p 8080:8080 docker_image --key=blah 一种方法是将java命令放在she

我编写了一个java应用程序,它使用一个环境变量,该环境变量使用一个参数为JWT令牌salt密钥设置一个密钥。我有没有办法在Docker Compose中传递命令变量

java -Djava.security.egd=file:/dev/./urandom -jar /user-profile-api.jar --key=blah
要运行docker映像,您只需

docker run -p 8080:8080 docker_image --key=blah

一种方法是将java命令放在shell脚本中(比如,
bootstrap.sh
),并将其设置为要在docker compose中运行的命令。然后在
bootstrap.sh
中,通过
docker compose.yml
中的环境变量注入密钥

例如

bootstrap.sh

java -Djava.security.egd=file:/dev/./urandom -jar /user-profile-api.jar --key=$SALT_KEY
docker-compose.yml

build: .
environment:
    - SALT_KEY=blah
command: /opt/app/bootstrap.sh

显然,您需要将
bootstrap.sh
打包到您的容器中,这样才能工作。

如果您已经能够使用以下方法运行docker容器:

docker-run-p8080:8080 docker\u image--key=blah

然后,您只需要在compose文件中将
服务的
命令
属性重写为--key=blah。因此:

services:
  app:
    command: --key=blah
...

那么你已经可以像那样运行图像了?您只需将
--key=blah
位作为撰写文件中服务的
命令
属性进行传递即可。这样就行了!谢谢介意添加它作为答案吗?我将添加选择它?很高兴它成功了,完成:)@JoelHolmes,上面的java命令是否位于入口点?这看起来可以,但是否有其他更灵活的方法?可能,但灵活是一个模糊的术语,请注意:只有当您有exec表单入口点(例如:
[“java”、“-Djava.security.egd=file:/dev//uradom”、“-jar”、“/app.jar”]
)时,传递系统参数才有效。详细说明如下