前端[在docker容器中运行]无法访问ASP.Net核心API [在另一个容器中运行]

时间:2019-12-06 12:00:50

标签: docker asp.net-core docker-compose asp.net-core-webapi

我正在创建两个docker容器,一个前端,另一个是.net核心API。但是当我从前端调用API时,出现如下异常,

  

SocketException:无法分配请求的地址   System.Net.Http.ConnectHelper.ConnectAsync(字符串主机,整数端口,CancelationToken cancelToken)

     

HttpRequestException:无法分配请求的地址   System.Net.Http.ConnectHelper.ConnectAsync(字符串主机,整数端口,CancelationToken cancelToken)

我还添加了一个docker compose文件来启用多容器部署,但是没有用。这是yml文件,


services:
  dockerdemofrontend:
    image: ${DOCKER_REGISTRY-}dockerdemofrontend
    build:
      context: .
      dockerfile: DockerDemoFrontEnd/Dockerfile

  dockerdemoapi:
    image: ${DOCKER_REGISTRY-}dockerdemoapi
    build:
      context: .
      dockerfile: DockerDemoAPI/Dockerfile

我感觉这两个网络是不同的。我们需要做些什么才能使这两个话题说话。请在这方面帮助我。

2 个答案:

答案 0 :(得分:0)

您可以为两个服务分配一个网络,例如

services:
  dockerdemofrontend:
    image: ${DOCKER_REGISTRY-}dockerdemofrontend
    build:
      context: .
      dockerfile: DockerDemoFrontEnd/Dockerfile
    networks:
      - common

  dockerdemoapi:
    image: ${DOCKER_REGISTRY-}dockerdemoapi
    build:
      context: .
      dockerfile: DockerDemoAPI/Dockerfile
    networks:
      - common


networks:
  common:
    driver: bridge

,然后您的主机将成为服务ex的名称:dockerdemoapi,端口将是您的api在内部运行的端口号

答案 1 :(得分:0)

在前端服务中使用depends_on,以使api始终始终首先加载。另外,请将它们都添加到同一网络中,否则您将无法通过服务名称来引用它们。

version: "3"
services:
  dockerdemofrontend:
    image: ${DOCKER_REGISTRY-}dockerdemofrontend
    build:
      context: .
      dockerfile: DockerDemoFrontEnd/Dockerfile
    depends_on:
      - dockerdemoapi
    networks:
      - shared 

  dockerdemoapi:
    image: ${DOCKER_REGISTRY-}dockerdemoapi
    build:
      context: .
      dockerfile: DockerDemoAPI/Dockerfile
    networks:
      - shared 
networks:
  shared:
    driver: bridge