Java 如何从docker命令行设置参数以配置spring boot应用程序?
我有一个带有yml的spring boot应用程序,可以在docker容器中配置它。 诸如此类: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外部化的方法,或
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 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仍然有效??我正在努力让它工作