在容器中运行的Spring Cloud Apps - 在本地计算机上运行,​​在Google Cloud上运行失败

时间:2018-02-10 00:39:52

标签: docker spring-boot google-cloud-platform spring-cloud

这是我在Stack Overflow上提出的早期问题的后续内容。我正在构建一个基于Spring Boot Cloud的服务。我在使用Docker的容器中运行它。我终于让它在我的本地机器上运行了。

# Use postgres/example user/password credentials
version: '3.2'
services:
  db:
    image: postgres
    ports:
      - 5000:5432
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - type: volume
        source: psql_data
        target: /var/lib/postgresql/data
    networks: 
      - app
    restart: always
  config:
    image: kellymarchewa/config_server
    ports:
      - 8888:8888
    networks:
      - app
    volumes:
      - /home/kelly/.ssh:/root/.ssh
    restart: always
  search:
    image: kellymarchewa/search_api
    networks:
      - app
    restart: always
    ports:
       - 8081:8081
    depends_on:
      - db
      - config
      - inventory
  inventory:
    image: kellymarchewa/inventory_api
    depends_on:
      - db
      - config
  # command: ["/home/kelly/workspace/git/wait-for-it/wait-for-it.sh", "config:8888"]
    ports:
      - 8082:8082
    networks:
      - app
    restart: always    
volumes:
  psql_data:
networks: 
  app:

之前,我在配置服务器上的客户端依赖性方面遇到了困难(配置服务器在客户端尝试访问它时没有完全启动)。但是,我使用spring-retry解决了此问题。现在,虽然我可以在本地计算机上使用docker-compose up运行它,但在由Google Cloud服务托管的虚拟机上运行相同的命令(使用相同的Docker文件)会失败。

inventory_1  | java.lang.IllegalStateException: Could not locate PropertySource and the fail fast property is set, failing

但是,它似乎在查询适当的位置:

inventory_1  | 2018-02-10 00:23:00.945  INFO 1 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://config:8888

我不确定是什么问题,因为它们都使用相同的docker-compose文件和配置服务器本身运行。

配置服务器的application.properties:

server.port=8888
management.security.enabled=false
spring.cloud.config.server.git.uri=git@gitlab.com:leisurely-diversion/configuration.git
 # spring.cloud.config.server.git.uri=${HOME}/workspace/eclipse/leisurely_diversion_config

客户端bootstrap.properties:

spring.application.name=inventory-client
#spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.uri=http://config:8888
management.security.enabled=false
spring.cloud.config.fail-fast=true
spring.cloud.config.retry.max-attempts=10
spring.cloud.config.retry.initial-interval=2000

编辑:

经过进一步检查,似乎配置服务器无法拉出存储应用程序属性的git存储库。但是,由于以下原因,我不确定为什么会出现这种情况:

  • 我已将GitLab的SSH密钥添加到我的VM。
  • 我可以从我的VM中提取存储库。
  • 我正在使用volumes来引用我的docker-compose文件中的/home/kelly/.sshknown_hosts文件包含在此目录中。
  • 以上(使用我的SSH密钥volumes)在我的开发机器上运行良好。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

最终,我能够解决这个问题。虽然这在几天前实际上得到了解决,但我发布了一般解决方案,希望它在将来可能有用。

首先,我能够确认(通过使用curl来调用我的服务器的一个端点),底层问题是配置服务器无法提取git repo。

最初,我有点困惑 - 我的SSH密钥已设置好,我能够git clone来自VM的repo。但是,在查看Spring Cloud documention时,我发现known_hosts文件必须采用ssh-rsa格式。但是,VM的ssh实用程序以不同的格式保存它们(即使我的开发机器和VM都在运行Debian 9)。要解决此问题,请以ssh-rsa格式添加相应的GitLab(或其他主机)条目。检查一个/etc/ssh/sshd_config也可能有价值。