【问题标题】:Is it possible to pass the spring.cloud.config.uri along with the docker run command?是否可以将 spring.cloud.config.uri 与 docker run 命令一起传递?
【发布时间】:2018-09-19 23:15:09
【问题描述】:

我是 docker 的初学者,因此有疑问。我有一个简单的 Spring Boot 应用程序从配置服务器获取属性。我想 dockerize 我的应用程序并拥有一个可以跨环境使用的静态图像。假设配置服务器 url 在更高的环境中会发生变化,是否可以将配置服务器 url (spring.cloud.config.uri) 与 docker run 命令一起传递?我的 docker 文件有一个 ENTRYPOINT 提及 java -jar 用于启动应用程序。

【问题讨论】:

  • 只需在启动 docker 容器时指定一个 docker 环境变量 SPRING_CLOUD_CONFIG_URI 所需的值。
  • @M.Deinum 谢谢!与我假设的 SPRING_PROFILES_ACTIVE 传递方式相同?
  • 完全一样,对于任何属性来说都是一样的。
  • @M.Deinum 如果您可以将其添加为答案,我可以接受。

标签: java spring docker


【解决方案1】:

正如Spring Boot reference guide 中解释的那样,Spring Boot 将读取来自不同来源的属性。这些来源之一是环境。

还记录了宽松绑定可用于绑定属性。后者意味着spring.profiles.activeSPRING_PROFILES_ACTIVE 都将用于指定活动配置文件。这适用于 Spring Boot 尝试解析的所有属性,因此它也适用于 spring.cloud.config.uri

使用 Docker,您可以指定 environment variables 这些将在容器中作为环境变量可用。

这两件事的结合使得通过 Docker 环境变量向 Spring Boot 提供值成为可能。

docker run --env SPRING_CLOUD_CONFIG-URI=<your-environment-url-here> -d -p 8080:8080 <container-id>

【讨论】:

  • 应该说SPRING_CLOUD_CONFIG_URI不是SPRING_CLOUD_CONFIG-URI吗?
【解决方案2】:

在我的例子中,我使用docker service create 命令来启动我的容器。除此之外,我还传递了我的论点 ex:CONFIG_URI 作为论点。

docker service create --name &lt;image_name&gt; -e CONFIG_URI="&lt;your URI&gt;" ......

在我的 Spring Boot 应用程序中,我会在我的应用程序属性中接受 CONFIG_URI 作为环境变量。

spring.cloud.config.uri=${CONFIG_URI}

在我的入口点文件中,我只是简单地提到了以下内容

java -jar -Dspring.profiles.active=qa

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 2015-02-17
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多