Docker-compose ERR_NAME_NOT_RESOLVED (Java Spring + Angular)

tho*_*asA 5 java http docker docker-compose angular

我有两个简单的图像:

#Angular image
FROM node:12.2.0

WORKDIR /app

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

COPY package.json /app/package.json
RUN npm install
RUN npm install -g @angular/cli@7.3.9

COPY . /app

CMD ng serve 
Run Code Online (Sandbox Code Playgroud)

&

# Java spring (REST) image
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY ./target/api-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar", "app.jar"]
Run Code Online (Sandbox Code Playgroud)

还有我的 docker-compose:

version: '3'

services:
  web_app_speech:
    image: web_app_speech
    restart: always
    ports:
      - "4300:4200"
    depends_on: 
      - api_speech_docker
  api_speech_docker:
    image: api_speech_docker
    ports:
      - "8080:8080"
    restart: always
Run Code Online (Sandbox Code Playgroud)

$> 码头工人

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
15c719d31861        web_app_speech      "/bin/sh -c 'ng serv…"   9 minutes ago       Up 9 minutes        0.0.0.0:4300->4200/tcp   azure_web_app_speech_1
044fd15f07e4        api_speech_docker   "java -Djava.securit…"   10 minutes ago      Up 9 minutes        0.0.0.0:8080->8080/tcp   azure_api_speech_docker_1
Run Code Online (Sandbox Code Playgroud)

我可以从 localhost:8080 访问我的 REST API,从 localhost:4300 访问我的 web 应用程序没有问题,但是当我尝试从我的 web_app 调用我的 rest_api 时,我有以下错误:

OPTIONS http://api_speech_docker:8080/speech net::ERR_NAME_NOT_RESOLVED
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决这个问题,如果您需要更多日志,请告诉我!

谢谢你的帮助

小智 0

据我了解,您的 REST API 是从浏览器调用的,无法解析 docker 服务名称。针对不同的应用,我采用了以下解决方案:

使用本地主机: http://localhost:8080/speech

  • 非常适合本地托管的项目
  • 如果托管在云上,可能会导致其他错误

或者

通过公网IP命中端点 http://13.192.123.12:8080/speech

  • 仅当 IP 地址不变时才有效
  • 如果托管在云上,还必须允许通过端口 8080 的入站流量