【问题标题】:Spring Cloud Config Server Won't Serve from Local FilesystemSpring Cloud Config Server 不会从本地文件系统服务
【发布时间】:2016-04-01 21:03:55
【问题描述】:

注意:我已经阅读了 thisthis 的问题。都没有帮助。

我创建了一个 Spring 配置服务器 Docker 映像。目的是能够运行具有不同配置文件和搜索位置的多个容器。这是与上述问题不同的地方,其中属性要么从 git 加载,要么从启动时配置服务器已知的类路径位置加载。我的配置服务器也传统上部署在 Tomcat 中,而不是使用重新打包的引导 jar。

当我访问http://<docker host>:8888/movie-service/native 时,我没有收到任何内容(见下文)。我期待的内容在问题的最后给出。

{"name":"movie-service","profiles":["native"],"label":"master","propertySources":[]}

我已经尝试了几乎所有在阳光下的东西,但就是无法让它发挥作用。


配置服务器主:

@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

【问题讨论】:

  • 您能在此处添加您的 Dockerfile 吗?如果您缺少内容,可能一开始就没有正确添加到图像中。不过,你能更清楚地描述“无”吗? :) 404 ?
  • @ArminBraun 我确实展示了我所说的“什么都没有”——不知道你是怎么错过的。这是下面的一行:) 但是,我自己解决了这个问题。看我的回答。

标签: docker spring-boot spring-cloud


【解决方案1】:

这是我自己想出来的。 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

【讨论】:

    猜你喜欢
    • 2017-03-26
    • 2021-03-01
    • 2020-11-26
    • 2021-03-25
    • 2019-08-11
    • 2021-11-17
    • 1970-01-01
    • 2017-03-29
    • 2018-12-08
    相关资源
    最近更新 更多