我正在使用Docker运行一个简单的spring微服务项目。我有两个项目:lucky-word-client(在端口8080上)和lucky-word-server(在端口8001上)。但我无法与服务器通信客户端。事实上,如果幸运字客户端与幸运字服务器进行通信,则结果是单词" Evviva",否则单词是"默认"。我的结果总是"默认",但我希望与服务器通信客户端有#34; Evviva"。
这是两类幸运字客户端:
package asw.springcloud.luckyword;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class LuckyWordApplication {
public static void main(String[] args) {
SpringApplication.run(LuckyWordApplication.class, args);
}
}
package asw.springcloud.luckyword;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Value;
@RestController
public class LuckyWordController {
@Value("${lucky-word}")
private String luckyWord;
@RequestMapping("/lucky-word")
public String luckyWord() {
return "The lucky word is: " + luckyWord;
}
}
这是lucky-word-client的文件application.properties:
# application.properties
# parola fortunata di default (if server is not accessible)
lucky-word=Default
这是lucky-word-client的文件bootstrap.properties:
# bootstrap.properties
spring.application.name=lucky-word
# i profili possibili sono italian e english
spring.profiles.active=italian
# oppure: export SPRING_PROFILES_ACTIVE=italian
spring.cloud.config.uri=http://localhost:8001
这是lucky-word-client的文件Dockerfile:
FROM frolvlad/alpine-oraclejdk8
ADD build/libs/lucky-word-client-0.0.1-SNAPSHOT.jar lucky-word-client.jar
EXPOSE 8080
ENTRYPOINT ["/usr/bin/java", "-Xmx128m", "-Xms128m"]
CMD ["-jar", "-Dspring.profiles.active=italian", "lucky-word-client.jar"]
这是幸运字服务器的类:
package asw.springcloud.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class CommonConfigServer {
public static void main(String[] args) {
SpringApplication.run(CommonConfigServer.class, args);
}
}
这是lucky-word-server的文件application.properties:
# application.yml
---
spring:
cloud:
config:
server:
git:
uri: https://github.com/..../
searchPaths: projects/config-data
server:
port: 8001
这是lucky-word-server的文件Dockerfile:
FROM frolvlad/alpine-oraclejdk8
ADD build/libs/common-config-server-0.0.1-SNAPSHOT.jar common-config-server.jar
EXPOSE 8001
ENTRYPOINT ["/usr/bin/java", "-Xmx128m", "-Xms128m"]
CMD ["-jar", "common-config-server.jar"]
答案 0 :(得分:2)
我假设您的客户端的此配置行应指向您的服务器:
spring.cloud.config.uri=http://localhost:8001
但是,如果您的客户端和服务器都部署为docker容器,则localhost将无法正常工作。
对于正在运行的docker容器,localhost指向自身,容器,而不是容器运行的主机。它与Spring无关,但与docker网络无关。
请参阅:https://docs.docker.com/network/
基本上,您需要在同一网络中部署两个容器,并使用容器名称作为主机。
答案 1 :(得分:0)
这取决于您在运行容器时使用的网络/主机模式。使用--network host
启用网络主机模式,这将使您能够使用localhost
。检查this manual。
另一个选项可能是设置类似于此docker-compose.yml
:
version: '3.2'
services:
client:
build: <PATH TO DOCKERFILE>
ports:
- "8080"
networks:
- general
server:
build: <PATH TO DOCKERFILE>
ports:
- "8001"
networks:
- general
networks:
general:
driver: bridge
ipam:
driver: default
之后,您的容器将位于同一网络上,并且可以通过以下方式连接:<CONTAINER_NAME>:PORT
,例如客户端连接到server:8001