![](/img/trans.png)
[英]Spring Cloud Config Server using SSH key for Git and running in Docker
[英]Unable to get Configuration from Spring Cloud Config Server while its running within a Docker Container
我一直在努力解決這一問題,有一天沒有運氣,我真的很困惑這個錯誤是什么。 我使用Spring Boot版本1.5.9.RELEASE和Spring Cloud Edgware.RELEASE創建了一個簡單的Spring Cloud Config Server。 我的配置倉庫是一個位桶存儲庫。 對於Docker,我正在使用fabric8 maven docker插件來構建docker鏡像,並將其部署在Mac的Docker上。 我也使用Java9。我能夠構建docker映像,並在端口8888上運行它,但是當我調用運行狀況端點時,它是“ Down”。 當我嘗試運行以下Get Request( http:// localhost:8888 / sample-api / dev )時,出現以下錯誤:
{
"timestamp": 1515552923667,
"status": 404,
"error": "Not Found",
"exception": "org.springframework.cloud.config.server.environment.NoSuchRepositoryException",
"message": "Cannot clone or checkout repository: https://bitbucket.org/<project>/<repo>.git",
"path": "/sample-api/dev"
}
以下是我的Dockerfile,所有敏感數據均已刪除
FROM openjdk:9
ENV PROFILE dev
VOLUME /config
ADD /maven/*.jar app.jar
EXPOSE 8888
RUN bash -c 'touch /app.jar'
WORKDIR /
ENTRYPOINT exec java -Dspring.profiles.active=$PROFILE -Djava.security.egd=file:/dev/./urandom -jar /app.jar
以下是我的應用程序yaml文件:
server:
port: 8888
spring:
application:
name: sample-config-server
cloud:
config:
server:
encrypt:
enabled: false
git:
uri: https://bitbucket.org/<project>/<repo>.git
username: ${GIT_USER_NAME}
password: ${GIT_PASSWORD}
username: ${CLOUD_CONFIG_NAME}
password: ${CLOUD_CONFIG_PASSWORD}
以下是我用於在docker上運行的命令:
mvn clean package docker:build
docker run -p 8888:8888 -d sample/<sample-config-server:latest
當我使用mvn -Dspring.profiles.active = dev spring-boot:run在本地運行時,一切正常。 僅當我收到404錯誤時,才在Mac的Docker中運行。 我嘗試將其切入容器並手動克隆git repo,我能夠做到這一點沒有問題。 我不知道問題出在我的Spring Cloud配置甚至是Spring Cloud Config Project本身。
有人遇到過這個問題嗎? 誰能復制這個問題?
更新:
我在minikube中運行了相同的容器,但仍然遇到相同的問題...我全天候工作以嘗試解決此問題,但尚未成功。 我會及時通知你的。
我終於能夠解決問題。 這與Spring Cloud Config或我的Spring Cloud Config配置無關。 在仔細分析日志后,我發現來自JGit的以下錯誤:
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
似乎openJDK 9 docker映像缺少其cacerts文件中的內容,從而阻止JGit與位桶建立成功的https連接,從而導致NoSuchRepositoryException。 我搜索了此問題,並在該主題上找到了此鏈接:
https://github.com/docker-library/openjdk/issues/145
根據我在鏈接中看到的內容,建議使用9-jdk-slim而不是9-jdk,因為9-jdk-slim沒有空的cacerts文件。
在我的Dockerfile中,我將FROM語句更改為使用9-jdk-slim而不是9-jdk。 我使用Maven Fabric 8插件重建了圖像,然后將圖像作為容器運行。 我能夠通過Spring Cloud Config服務器成功從Bitbucket獲取配置。 這適用於Mac的Docker和Minikube。 我的經驗教訓是完全啟用Spring Boot中的日志記錄,並仔細分析日志以解決此類問題。 希望這對其他有類似問題的開發人員有所幫助。
1)您對主機和容器中端口的引用指的是8888,但您包含的鏈接表示http://localhost:8080/sample-api/dev
。 是錯字,還是您在端口8080上監聽了另一個應用程序。
可以使用以下格式查詢配置服務器:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
在您的Bitbucket存儲庫中如何命名屬性文件?
順便說一句,我已經在博客上寫了這個確切的主題,提供了源代碼和docker鏡像,它可能會幫助您入門:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.