Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从docker命令行设置参数以配置spring boot应用程序?_Java_Spring_Docker_Spring Boot - Fatal编程技术网

Java 如何从docker命令行设置参数以配置spring boot应用程序?

Java 如何从docker命令行设置参数以配置spring boot应用程序?,java,spring,docker,spring-boot,Java,Spring,Docker,Spring Boot,我有一个带有yml的spring boot应用程序,可以在docker容器中配置它。 诸如此类: spring: application: name: micro-example config: uri: ${vcap.services.config-service.credentials.uri:http://xxx.xxx.xx.73:8888} 正如您所看到的,在我的配置中有一个ip硬编码,这是一个坏主意,因为编译只针对服务器。 是否存在将ip外部化的方法,或

我有一个带有yml的spring boot应用程序,可以在docker容器中配置它。 诸如此类:

 spring:   application:
   name: micro-example
   config:
     uri: ${vcap.services.config-service.credentials.uri:http://xxx.xxx.xx.73:8888}
正如您所看到的,在我的配置中有一个ip硬编码,这是一个坏主意,因为编译只针对服务器。
是否存在将ip外部化的方法,或通过docker命令行或更好的方法设置ip?

有许多不同的方法:

1) 设置环境变量(使用
export VCAP\u SERVICES\u CONFIG-SERVICE\u CREDENTIALS\u URI=)http://example.com“
在shell中,或
ENV
内部
Dockerfile

2) 将其作为JVM参数(
java-Dvcap.services.config-service.credentials.uri)传递=http://example.com -jar app.jar

3) 将其作为命令行参数传递(
java-jar app.jar--vcap.services.config-service.credentials.uri)=http://example.com

4) Spring Boot还从与可执行JAR文件位于同一目录中的
config/application.properties
application.properties
读取值,因此可以提供此文件(您可以使用
VOLUME
)并覆盖JAR中的设置


另请参见:

从我的角度来看,您基本上有几个选择:

  • 将参数作为环境变量从docker传入,例如,使用以下命令启动应用程序:
    docker run-e SPRING\u CONFIG\u URI=”http://xxx.xxx.xx.73:8888 用户/图像:标记“
  • 使用相同的主机名并使用容器链接,方法是为第一个容器命名
    docker run--name configserver my/configserver:latest
    ,然后启动服务,然后使用链接
    docker run--link configserver:configserver my/service:latest
    。注意,您将绑定到同一docker主机
  • 始终使用相同的主机名和端口,并在容器启动时插入正确的主机名映射,例如配置
    http://configserver:8888
    在应用程序中,使用
    docker run启动容器--添加主机配置服务器:xxx.xxx.xx.73用户/图像:标记
  • 通过
    docker run--DNS=your DNS server user/image:tag
    将可充当DNS服务器的自定义服务注入正在运行的容器,并在具有动态配置(如或+)的DNS服务器中注册从属服务

  • 然而,最后一种方法的好处是,您可以跨托管docker容器的节点将容器动态链接在一起。

    然而,您可以覆盖docker中的某些内容。选项2并不可取,因为它要求您在启动docker容器时可以操纵入口点。如果只需要传递几个选项(如此处的configserver url),则选项1和3是好的,而选项3需要特定的
    Dockerfile结构。如果您想覆盖很多设置,但也需要更改Spring Boot的默认设置,那么选项4是很好的。我个人更喜欢配置服务器和git设置的3。谢谢,我会尝试你的adviceDoes选项#3仍然有效??我正在努力让它工作