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

标签 docker .net-core

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

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

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

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

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

这是我的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://localhost:44389
    depends_on:
      - rc.api

networks:
  my-net:
    driver: bridge

最佳答案

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)

关于docker - Docker Web应用程序无法与API应用程序通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54380543/

相关文章:

centos - 如何在 CentOS 7 上安装 docker?

mysql - 如何在我的 kubernetes 集群之外访问 mysql?

gcc - 在docker gcc和java中制作2个卷

java - 如何打开在Docker容器上运行的应用程序的远程调试?

c# - .Net Core如何实现SQLAdapter ./DataTable函数

asp.net-mvc - .net 核心和 kestrel - 使用 IIS 作为 Windows 身份验证中介的最佳实践?

c# - 通过 .NET Core 上的 MEF 将参数传递给插件构造函数?

docker - 如何使用 docker compose v3 在容器中直接挂载 NFS 共享/卷

c# - .Net core 2 Web api 未将配置注入(inject)服务

c# - 如何创建同时面向 .NET 2.0 和 .NET Standard 的库?