为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2022-12-28 15:52:20
我正在使用 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-testENTRYPOINT java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=$profiles -jar /app.jar
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您将不得不为此使用一个.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"

.env

bar="i was correctly read"

结果是:


nico@tuxedo:~/StackOverflow$ docker-compose config

services:

  foo:

    entrypoint:

    - echo

    - '"i was correctly read"'

    image: alpine

version: '3.7'

nico@tuxedo:~/StackOverflow$ docker-compose up

Starting stackoverflow_foo_1 ... done

Attaching to stackoverflow_foo_1

foo_1  | "i was correctly read"

stackoverflow_foo_1 exited with code 0


查看完整回答
反对 回复 2022-12-28
  • 1 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信