使用可变的程序参数以灵活的方式启动 docker

我正在使用 docker-compose v3。最有趣的配置部分是:


entrypoint:

  - java

  - -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=docker-test -jar /app.jar

请注意-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=docker-test -jar /app.jar- 活动配置文件是docker-test。此配置对我有用。试图改进一个,将配置文件值移动到单独的变量:


environment:

 - profiles=docker-test

并通过改进更新java参数:


  - -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=$profiles -jar /app.jar

程序失败。检查日志:


INFO 1 --- [           main] c.s.n.d.m.d.DiscoveryServiceApplication  : No active profile set, falling back to default profiles: default

这意味着 docker 改进在 java 级别不可见,似乎变量$profiles没有被其值替换。将 java 级别与前面的示例进行比较 - 值已更改,但期望值必须相同。


有什么解决办法吗?


聚苯乙烯

如果我在Dockerfile水平上做类似的事情 - 它有效:


ENV profiles=docker-test

ENTRYPOINT java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=$profiles -jar /app.jar


料青山看我应如是
浏览 92回答 1
1回答

慕哥6287543

您将不得不为此使用一个.env文件。Docker Compose 无法替换environment:配置文件其他部分中的变量(entrypoint:在本例中)。您可以docker-compose config在项目文件夹中运行时检查它,您会看到它profiles是空的。.env在您所在的同一目录中创建一个名为的文件docker-compose.yml。内容应该是:profiles=docker-test那么你应该可以开始了。最小的例子:docker-compose.yml:version: "3.7"services:  foo:    image: alpine    entrypoint:      - echo      - "$bar".envbar="i was correctly read"结果是:nico@tuxedo:~/StackOverflow$ docker-compose configservices:  foo:    entrypoint:    - echo    - '"i was correctly read"'    image: alpineversion: '3.7'nico@tuxedo:~/StackOverflow$ docker-compose upStarting stackoverflow_foo_1 ... doneAttaching to stackoverflow_foo_1foo_1  | "i was correctly read"stackoverflow_foo_1 exited with code 0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java