如何从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.properties
或application.properties
中的值,因此可以提供此文件(可以使用VOLUME
)并覆盖来自JAR的设置
另见: http : //docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
从我的angular度来看,你基本上有几个select:
- 从
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"
- 使用相同的主机名和使用容器链接通过给你的第一个容器名称
docker run --name configserver my/configserver:latest
名称docker run --name configserver my/configserver:latest
和启动您的服务,然后使用链接docker run --link configserver:configserver my/service:latest
。 警戒是你将被绑定到相同的docker主机。 - 一直使用相同的主机名和端口,并在容器启动时注入正确的主机名映射,例如在你的应用程序中configuration
http://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
- 通过
docker run --dns=your-dns-server user/image:tag
注入一个可以充当DNS服务器的自定义服务,并将你的依赖服务注册到可以有dynamicconfiguration的dns服务器中, SkyDNS + etcd 。
而最后一种方法的好处是可以将容器dynamic链接在托pipeDocker容器的节点上。