Docker Web应用程序无法与API应用程序通信

时间:2019-01-26 16:54:56

标签: docker .net-core

我在docker中运行了2个.net核心应用程序(一个是Web API,另一个是使用Web API的Web应用程序):

我似乎无法通过Web应用程序与api进行通信,但是我可以通过在http://localhost:44389的浏览器中直接访问api来访问该api

我的Web应用程序中有一个环境变量,该环境变量具有相同的信息,但无法获取。

如果我要在azure上指定我的API的部署版本,它就可以与该地址通信。似乎问题出在容器之间互相交谈。

我读到,创建网桥应该可以解决该问题,但事实并非如此。我在做什么错了?

这是我的docker撰写文件:

version: '3.4'

services:
  rc.api:
    image: ${DOCKER_REGISTRY}rcapi
    build:
      context: .
      dockerfile: rc.Api/Dockerfile
    ports:
      - "44389:80"

  rc.web:
    image: ${DOCKER_REGISTRY}rcweb
    build:
      context: .
      dockerfile: rc.Web/Dockerfile
    environment:
      - api_endpoint=http://localhost:44389
    depends_on:
      - rc.api

networks:
  my-net:
    driver: bridge

2 个答案:

答案 0 :(得分:3)

docker-compose自动在您的容器之间创建网络。由于容器位于同一网络中,因此您可以使用别名在容器之间进行连接。 docker-compose使用容器名称和容器IP创建别名。因此,在您的情况下,docker-compose应该看起来像

version: '3.4'

services:
  rc.api:
    image: ${DOCKER_REGISTRY}rcapi
    build:
      context: .
      dockerfile: rc.Api/Dockerfile
    ports:
      - "44389:80"

  rc.web:
    image: ${DOCKER_REGISTRY}rcweb
    build:
      context: .
      dockerfile: rc.Web/Dockerfile
    environment:
      - api_endpoint=http://rc.api
    depends_on:
      - rc.api

networks:
  my-net:
    driver: bridge

rc.api中一样,在其容器中打开端口80,因此rc.web可以使用http://rc.api:80http://rc.api访问80端口(无端口,因为HTTP端口默认为80)

答案 1 :(得分:0)

您需要调用http://rc.api,因为您有两个容器并且API容器localhost与Web应用程序容器localhost不同。

约定是每个服务都可以通过docker-compose.yml中指定的名称来解析。

因此,您可以在内部端口80上调用API,而不必将其暴露在特定的端口上。