如何从docker命令行设置参数来configurationspring引导应用程序?

我有我的弹簧启动应用程序与一个YMLconfiguration它在一个docker的收件人。 类似的东西:

spring: application: name: micro-example config: uri: ${vcap.services.config-service.credentials.uri:http://xxx.xxx.xx.73:8888} 

正如你所看到的,在我的configuration中有一个ip硬编码,这是一个坏主意,因为compililation只是一个服务器。 是否有一种方法来外部化的IP,或从docker命令行或更好的主意设置?

有很多不同的方法来做到这一点:

1)设置环境variables(在shell中使用export VCAP_SERVICES_CONFIG-SERVICE_CREDENTIALS_URI='http://example.com' ,或者在Dockerfile ENV

2)将其作为JVMparameter passing( java -Dvcap.services.config-service.credentials.uri=http://example.com -jar app.jar

3)将它作为命令行parameter passing( java -jar app.jar --vcap.services.config-service.credentials.uri=http://example.com

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

另见: http : //docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

从我的angular度来看,你基本上有几个select:

  1. docker run -e SPRING_CONFIG_URI="http://xxx.xxx.xx.73:8888 user/image:tag" params作为环境variables,例如通过使用以下命令启动应用程序: docker run -e SPRING_CONFIG_URI="http://xxx.xxx.xx.73:8888 user/image:tag"
  2. 使用相同的主机名和使用容器链接通过给你的第一个容器名称docker run --name configserver my/configserver:latest名称docker run --name configserver my/configserver:latest和启动您的服务,然后使用链接docker run --link configserver:configserver my/service:latest 。 警戒是你将被绑定到相同的docker主机。
  3. 一直使用相同的主机名和端口,并在容器启动时注入正确的主机名映射,例如在你的应用程序中configurationhttp://configserver:8888 ,并用docker run --add-host configserver:xxx.xxx.xx.73 user/image:tag启动容器docker run --add-host configserver:xxx.xxx.xx.73 user/image:tag
  4. 通过docker run --dns=your-dns-server user/image:tag注入一个可以充当DNS服务器的自定义服务,并将你的依赖服务注册到可以有dynamicconfiguration的dns服务器中, SkyDNS + etcd 。

而最后一种方法的好处是可以将容器dynamic链接在托pipeDocker容器的节点上。