我的弹簧启动应用程序带有yml,可以在docker containter中配置它。 这样的事情:
spring: application:
name: micro-example
config:
uri: ${vcap.services.config-service.credentials.uri:http://xxx.xxx.xx.73:8888}
正如你所看到的,我的配置中有一个ip硬编码,这是一个坏主意,因为编译仅适用于服务器。 是否存在外部化ip的方法,或者从docker命令行或更好的想法设置它?
答案 0 :(得分:5)
有很多不同的方法可以做到:
1)设置环境变量(在shell中使用export VCAP_SERVICES_CONFIG-SERVICE_CREDENTIALS_URI='http://example.com'
,在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还会读取config/application.properties
或application.properties
中与可执行JAR文件位于同一目录中的值,因此可以提供此文件(您可以使用)对此VOLUME
并覆盖JAR中的设置
另请参阅:http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
答案 1 :(得分:1)
从我的角度来看,你基本上有一些选择:
docker run -e SPRING_CONFIG_URI="http://xxx.xxx.xx.73:8888 user/image:tag"
docker run --name configserver my/configserver:latest
,然后使用链接docker run --link configserver:configserver my/service:latest
启动您的服务。警告是你将被绑定到同一个docker主机。http://configserver:8888
并使用docker run --add-host configserver:xxx.xxx.xx.73 user/image:tag
docker run --dns=your-dns-server user/image:tag
向正在运行的容器注入可作为DNS服务器的自定义服务,并在具有动态配置的dns服务器中注册您的相关服务,例如consul或{{3} } + SkyDNS。尽管最后一种方法的好处是可以将容器动态链接到托管泊坞容器的交叉节点。