Spring 云配置服务器无法从本地文件系统提供服务
Spring Cloud Config Server Won't Serve from Local Filesystem
注意:我已阅读 this and this 问题。都没有帮助。
我创建了一个 Spring 配置服务器 Docker 图像。目的是能够 运行 具有不同配置文件和搜索位置的多个容器。这是它与上述问题的不同之处,在上述问题中,属性要么从 git 加载,要么从配置服务器在启动时已知的类路径位置加载。我的配置服务器也传统上部署在 Tomcat 中,而不是使用重新打包的引导 jar。
当我访问 http://<docker host>:8888/movie-service/native
时,我没有得到任何内容(见下文)。我期待的内容在问题的最后给出了。
{"name":"movie-service","profiles":["native"],"label":"master","propertySources":[]}
我已经尝试了几乎所有的方法,但就是无法正常工作。
配置服务器 main:
@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServer extends SpringBootServletInitializer {
/* Check out the EnvironmentRepositoryConfiguration for details */
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ConfigServer.class);
}
}
配置服务器 application.yml
:
spring:
cloud:
config:
enabled: true
server:
git:
uri: ${CONFIG_LOCATION}
native:
searchLocations: ${CONFIG_LOCATION}
server:
port: ${HTTP_PORT:8080}
配置服务器 bootstrap.yml
:
spring:
application:
name: config-service
eureka:
instance:
hostname: ${CONFIG_HOST:localhost}
preferIpAddress: false
client:
registerWithEureka: ${REGISTER_WITH_DISCOVERY:true}
fetchRegistry: false
serviceUrl:
defaultZone: http://${DISCOVERY_HOST:localhost}:${DISCOVERY_PORT:8761}/eureka/
Docker 运行 命令:
docker run -it -p 8888:8888 \
-e CONFIG_HOST="$(echo $DOCKER_HOST | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')" \
-e HTTP_PORT=8888 \
-e CONFIG_LOCATION="file:///Users/<some path>/config/" \
-e REGISTER_WITH_DISCOVERY="false" \
-e SPRING_PROFILES_ACTIVE=native xxx
配置目录:
/Users/<some path>/config
--- movie-service.yml
movie-service.yml
的内容:
themoviedb:
url: http://api.themoviedb.org
我自己想出来了。 Docker 容器无权访问主机文件系统,除非在运行时使用 -v
标志挂载文件系统目录。
为了完整起见,这是完整的工作 Docker run
命令:
docker run -it -p 8888:8888 \
-e CONFIG_HOST="$(echo $DOCKER_HOST | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')" \
-e HTTP_PORT=8888 \
-e CONFIG_LOCATION="file:///Users/<some path>/config/" \
-e REGISTER_WITH_DISCOVERY="false" \
-e SPRING_PROFILES_ACTIVE=native \
-v "/Users/<some path>/config/:/Users/<some path>/config/" \
xxx
注意:我已阅读 this and this 问题。都没有帮助。
我创建了一个 Spring 配置服务器 Docker 图像。目的是能够 运行 具有不同配置文件和搜索位置的多个容器。这是它与上述问题的不同之处,在上述问题中,属性要么从 git 加载,要么从配置服务器在启动时已知的类路径位置加载。我的配置服务器也传统上部署在 Tomcat 中,而不是使用重新打包的引导 jar。
当我访问 http://<docker host>:8888/movie-service/native
时,我没有得到任何内容(见下文)。我期待的内容在问题的最后给出了。
{"name":"movie-service","profiles":["native"],"label":"master","propertySources":[]}
我已经尝试了几乎所有的方法,但就是无法正常工作。
配置服务器 main:
@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServer extends SpringBootServletInitializer {
/* Check out the EnvironmentRepositoryConfiguration for details */
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ConfigServer.class);
}
}
配置服务器 application.yml
:
spring:
cloud:
config:
enabled: true
server:
git:
uri: ${CONFIG_LOCATION}
native:
searchLocations: ${CONFIG_LOCATION}
server:
port: ${HTTP_PORT:8080}
配置服务器 bootstrap.yml
:
spring:
application:
name: config-service
eureka:
instance:
hostname: ${CONFIG_HOST:localhost}
preferIpAddress: false
client:
registerWithEureka: ${REGISTER_WITH_DISCOVERY:true}
fetchRegistry: false
serviceUrl:
defaultZone: http://${DISCOVERY_HOST:localhost}:${DISCOVERY_PORT:8761}/eureka/
Docker 运行 命令:
docker run -it -p 8888:8888 \
-e CONFIG_HOST="$(echo $DOCKER_HOST | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')" \
-e HTTP_PORT=8888 \
-e CONFIG_LOCATION="file:///Users/<some path>/config/" \
-e REGISTER_WITH_DISCOVERY="false" \
-e SPRING_PROFILES_ACTIVE=native xxx
配置目录:
/Users/<some path>/config
--- movie-service.yml
movie-service.yml
的内容:
themoviedb:
url: http://api.themoviedb.org
我自己想出来了。 Docker 容器无权访问主机文件系统,除非在运行时使用 -v
标志挂载文件系统目录。
为了完整起见,这是完整的工作 Docker run
命令:
docker run -it -p 8888:8888 \
-e CONFIG_HOST="$(echo $DOCKER_HOST | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')" \
-e HTTP_PORT=8888 \
-e CONFIG_LOCATION="file:///Users/<some path>/config/" \
-e REGISTER_WITH_DISCOVERY="false" \
-e SPRING_PROFILES_ACTIVE=native \
-v "/Users/<some path>/config/:/Users/<some path>/config/" \
xxx