首页 > 解决方案 > Docker 撰写问题(ECONNREFUSED)

问题描述

我有两个 docker-compose 用于后端(.net Core)和 Angular 前端。这些应该相互通信。为此,我尝试了一个网络。但我总是收到以下消息:

[HPM] 尝试将请求 /appinfo 从 localhost:4200 代理到http://localhost:5000时发生错误(ECONNREFUSED)

两个容器都在运行。后端撰写是通过 Visual Studio 启动的。frontend-compose 是使用 powershell 启动的。

我在前端尝试了 80 和 5000 端口。结果是一样的。

对于网络,我在没有外部的情况下尝试过。对于外部,我使用“docker network create test_network”手动创建了网络。

后端码头工人撰写:

version: '3.7'

services:
  backend_sql:
    image: mcr.microsoft.com/mssql/server:2017-GA-ubuntu
    container_name: testsql
    networks:
      - test_network
    ports:
      - "1440:1433"
    volumes:
     - testsqldata:/var/opt/mssql

  backend_api:
    image: ${DOCKER_REGISTRY-}backendapi
    container_name: testapi
    build:
      context: .
      dockerfile: backendAPI/Dockerfile
    networks:
      - test_network
    depends_on:
     - backend_sql
    ports:
     - "5000:80"

networks:
  test_network:
    external:
        name: test_network

volumes:
  testsqldata:
    driver: local
    name: testsqldata

前端码头工人撰写:

version: "3.7"
services:
  testapp:
    container_name: testapp
    build: .
    networks:
      - test_network
    ports:
      - "4200:4200"
      - "49153:49153"
    volumes:
      - "/app/node_modules"
      - ".:/app"

networks:
  test_network:
    external:
      name: test_network

前端 dockerfile:

FROM node:10.16.3-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 4200 49153
CMD npm run start

包.json:

"scripts": {
    "ng": "ng",
    "start": "ng serve --host 0.0.0.0 --port 4200 --poll 500 --disableHostCheck",
    "serve": "ng serve --proxy-config src/proxy.server.config.js",  

proxy.server.config.js:

const PROXY_CONFIG = [
    {
        context: [
            '/api',
        ],
        target: 'http://localhost:5000',
        secure: false,
        logLevel: 'debug',
        ws: true,
        pathRewrite: {
            "^/api": ""
        }
    }
];

module.exports = PROXY_CONFIG;      

标签: angulardocker.net-coredocker-compose

解决方案


Docker Compose 网络文档中,

每个容器现在都可以查找主机名 web 或 db 并取回相应容器的 IP 地址。例如,web 的应用程序代码可以连接到 URL postgres://db:5432 并开始使用 Postgres 数据库。

您应该使用容器名称作为主机名。


推荐阅读