【问题标题】:Docker Compose JVM parametersDocker Compose JVM 参数
【发布时间】:2016-07-18 21:36:52
【问题描述】:

我编写了一个 java 应用程序,它接受一个环境变量,该变量接受一个参数来为 JWT 令牌盐键设置一个键。有没有办法让我在 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

【问题讨论】:

  • 那么您已经可以像这样运行图像了吗?您可以将--key=blah 位作为command 属性传递给撰写文件中的服务。
  • 成功了!谢谢!介意添加它作为答案,我会添加选择它?
  • 很高兴它成功了,完成了:)
  • @JoelHolmes,上面的 java 命令是否位于入口点?

标签: java docker docker-compose


【解决方案1】:

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

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

然后您只需将撰写文件中servicecommand 属性覆盖为--key=blah。所以:

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

【讨论】:

  • 请注意:传递系统参数只有在你有 exec 表单入口点时才有效(例如:["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"])。详细描述here
【解决方案2】:

一种方法是将您的 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 打包到您的容器中才能正常工作。

【讨论】:

  • 这看起来可行,但还有其他更灵活的方法吗?
  • 也许可以,但是灵活是一个模糊的术语,你能准确地说出你想要拥有什么样的灵活性吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 2018-11-28
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多