首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker:客户端与服务器之间的链接

Docker:客户端与服务器之间的链接
EN

Stack Overflow用户
提问于 2018-06-04 18:59:47
回答 2查看 68关注 0票数 0

我正在和Docker一起运行一个简单的spring微服务项目。我有两个项目:lucky word-client(在端口8080)和lucky word-server(在端口8001)。但是我不能与客户端和服务器进行通信。事实上,如果幸运词客户端与幸运词服务器进行通信,则结果为"Evviva",否则为"Default“。我的结果总是"Default",但我想让客户端与服务器通信时使用"Evviva“一词。

这是两个类的幸运词客户端:

代码语言:javascript
复制
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的文件客户端:

代码语言:javascript
复制
# application.properties 
# parola fortunata di default (if server is not accessible)
lucky-word=Default

这是lucky word- bootstrap.properties的文件客户端:

代码语言:javascript
复制
 # 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文件:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
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的文件:

代码语言:javascript
复制
# application.yml 
---
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/..../
          searchPaths: projects/config-data
server:
  port: 8001

这是lucky word-server的Dockerfile文件:

代码语言:javascript
复制
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"]
EN

回答 2

Stack Overflow用户

发布于 2018-06-04 20:28:00

我假设您的客户机中的以下配置行应该指向您的服务器:

代码语言:javascript
复制
spring.cloud.config.uri=http://localhost:8001

但是,如果您的客户端和服务器都部署为docker容器,则localhost将无法工作。

对于正在运行的docker容器,localhost指向容器本身,而不是运行容器的主机。它与Spring无关,而是纯粹与docker网络有关。

请参阅:https://docs.docker.com/network/

基本上,您需要在同一网络中部署两个容器,并使用容器名称作为主机。

票数 2
EN

Stack Overflow用户

发布于 2018-06-04 20:53:21

这取决于您在运行容器时使用的网络/主机模式。使用--network host将启用网络主机模式,这将使您能够使用localhost。检查this manual

另一个选项可以是设置它,类似于这个docker-compose.yml

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50679043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档