我正在和Docker一起运行一个简单的spring微服务项目。我有两个项目:lucky word-client(在端口8080)和lucky word-server(在端口8001)。但是我不能与客户端和服务器进行通信。事实上,如果幸运词客户端与幸运词服务器进行通信,则结果为"Evviva",否则为"Default“。我的结果总是"Default",但我想让客户端与服务器通信时使用"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- application.properties的文件客户端:
# application.properties
# parola fortunata di default (if server is not accessible)
lucky-word=Default这是lucky word- 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"]这是lucky word-server类:
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- 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"]发布于 2018-06-04 20:28:00
我假设您的客户机中的以下配置行应该指向您的服务器:
spring.cloud.config.uri=http://localhost:8001但是,如果您的客户端和服务器都部署为docker容器,则localhost将无法工作。
对于正在运行的docker容器,localhost指向容器本身,而不是运行容器的主机。它与Spring无关,而是纯粹与docker网络有关。
请参阅:https://docs.docker.com/network/
基本上,您需要在同一网络中部署两个容器,并使用容器名称作为主机。
发布于 2018-06-04 20:53:21
这取决于您在运行容器时使用的网络/主机模式。使用--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
https://stackoverflow.com/questions/50679043
复制相似问题