Angular 无法连接到 docker compose 中的 Spring Boot 端点

Posted

技术标签:

【中文标题】Angular 无法连接到 docker compose 中的 Spring Boot 端点【英文标题】:Angular cant connect to spring boot endpoints in docker compose 【发布时间】:2019-05-28 12:57:51 【问题描述】:

我将我的 spring 应用程序(后端)和 angular 应用程序(前端)移动到 docker compose - 看起来一切正常,但是当 angular 向 spring boot 发送 GET/POST 时没有响应。

Dockerfile:

FROM java

VOLUME /tmp

ADD build/libs/backend.jar spring-boot-app.jar

RUN bash -c 'touch /spring-boot-app.jar'

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/spring-boot-app.jar"]

docker-compose.yml

version: '3'


  backend:
    container_name: "backend"
    restart: always
    image: app:latest
    depends_on:
    - mysql
    - mongodb
    ports:
    - 8087:8080

  frontend:
    container_name: "frontend"
    image: frontend:latest
    ports:
    - 4201:4200

Dockerfile 角度:

FROM node:9.6.1

RUN mkdir /usr/src/app
WORKDIR /usr/src/app

ENV PATH /usr/src/app/node_modules/.bin:$PATH

COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install -g @angular/cli@1.7.1

COPY . /usr/src/app

CMD ng serve --host 0.0.0.0 --prod

我的 api 常量:

export const environment = 
  production: true,
  apiUrl: "http://backend:8080"
;

当我转到 localhost:4201 - 我可以看到我的前端,当我转到 localhost:8087 我可以看到我的后端和端点运行良好,但是 Angular 没有得到响应:

有几次我试图弄清楚 - 我会感谢每一个建议。

【问题讨论】:

您正在暴露端口8087,因此您可能应该在此处更改端口号:apiUrl: "http://backend:8087" 我只将它暴露给我的机器 - 在 docker 内部应该看到端口 8080,就像我在 ports: - 8087:8080 中所做的那样 是的,但是您的浏览器向后端发出请求,而不是 Angular 容器。角度容器仅托管内容。 【参考方案1】:

Angular 应用程序没有在容器 中运行,它作为静态文件在浏览器 中运行。您已将容器外部的 8087 端口映射到容器内部的 8080 端口,因此只需使用以下 URL 进行来自 Angular 的 API 调用:http://<your-machine-or-domain-name>:8087

【讨论】:

以上是关于Angular 无法连接到 docker compose 中的 Spring Boot 端点的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Angular Nginx 容器连接到 Node API docker 容器

如何在 docker 容器之间连接到 oracle 数据库?

将 NodeJS Docker 容器连接到 MySQL Docker 容器 - docker-compose 3

从不同的docker-compose从一个容器连接到另一个容器[重复]

无法将 Express.js 服务器连接到 Angular 前端

尝试通过 docker-compose 将 NodeJS 应用程序连接到 MySQL 映像时出现 ECONNREFUSED