【问题标题】:Docker-compose ERR_NAME_NOT_RESOLVED (Java Spring + Angular)Docker-compose ERR_NAME_NOT_RESOLVED (Java Spring + Angular)
【发布时间】:2019-11-05 13:40:10
【问题描述】:

我有两张简单的图片:

#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 

&

# 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"]

还有我的 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

$> 码头工人ps

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

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

OPTIONS http://api_speech_docker:8080/speech net::ERR_NAME_NOT_RESOLVED

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

谢谢你的帮助????

【问题讨论】:

  • 如果 Web 应用程序在浏览器中运行,则不知道存在 Docker 主机名。您需要使用服务器的主机名和发布的端口。
  • “Shell”进入您的 web_app_speech 容器(docker exec -it ContainId sh)并尝试 ping 另一个容器:“ping api_speech_docker”。那应该行得通。但是,您可能希望在撰写文件中定义一个“网络”。
  • @DavidMaze 嗨,谢谢你的回复,你能更准确吗?我需要将我的 API 调用的 url 更改为 'localhost:8087' 之类的东西?
  • @JoeG 您好,感谢您的回复。我可以毫无问题地从我的 web_app ping 我的 api。我之前定义了一个简单的网络(没有配置),它没有工作。
  • 对不起,我应该建议,如果您可以从 webapp 容器中成功 ping,那么您应该尝试从那里“卷曲”http 地址(您可能需要在容器中安装 curl,您可以从命令行执行此操作,但可能需要使用 -u0 开关进行 shell)。使用 curl -v 。并发布结果

标签: java angular docker http docker-compose


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 2018-06-18
    • 2021-09-20
    • 2018-01-11
    • 1970-01-01
    • 2021-02-15
    • 2019-05-28
    • 2017-10-22
    相关资源
    最近更新 更多