我如何让我的两个Docker容器相互通信?

时间:2019-03-30 15:04:01

标签: spring-boot docker spring-mvc containers

如何让我的两个docker容器在Localhost上相互通信?

我将我的项目分为后端和前端。我现在试图在单独的docker容器中运行这两个部分,但是我被拒绝连接。我尝试在docker网络上同时运行它们,但似乎没有用。

我的Dockerfile都像


COPY ./build/libs/demo-0.0.1-SNAPSHOT.jar /usr/app/

WORKDIR /usr/app

RUN sh -c 'touch demo-0.0.1-SNAPSHOT.jar'

RUN apk add --update \
    curl \
    && rm -rf /var/cache/apk/*

ENTRYPOINT ["java","-jar","demo-0.0.1-SNAPSHOT.jar"]

前端通过

调用后端
protected <T> ResponseEntity<T> getRequest(String path, Class<T> responseType) {
        return restTemplate.getForEntity("http://localhost:8090/" + path, responseType);
    }

但是我得到了

java.net.ConnectException: Connection refused (Connection refused)

我通过以下两个容器运行

docker run -p 8090:8090 -d repo/back-end
docker run -p 8080:8080 -d repo/front-end   

2 个答案:

答案 0 :(得分:0)

在docker中,您可以创建自己的网络:

let color = UIColor(red: .random(in: 0...1),
                    green: .random(in: 0...1),
                    blue: .random(in: 0...1),
                    alpha: 1)

并使用docker network create myNetwork --net标志在此网络内运行容器:

--name

然后,您应该能够使用前端容器中的docker run -d -p 8000:8000 --net myNetwork --name backend backend-image docker run -d -p 8001:8001 --net myNetwork frontend-image 网址访问后端。

答案 1 :(得分:0)

感谢双方的回应,我在前端添加了一个docker-compose.yml

version: '3'
services:
  frontend:
    build: .
    ports:
      - "8080:8080"
networks:
  default:
    external:
      name: myNetwork

和后端

version: '3'
services:
  backend:
    build: .
    ports:
      - "8090:8090"
networks:
  default:
    external:
      name: myNetwork

然后更改我的休息服务以拨打电话

private static final String prefix = "http://backend:8090/";