Прокси-сервер Angular-CLI не подключается через Docker (ECONNREFUSED) - PullRequest
0 голосов
/ 23 декабря 2019

Я запускаю Docker в Windows через WSL.

Я пытаюсь прокси-запросы от моего клиентского приложения, работающего на порту 4200, на мой сервер, работающий в том же домене на порту 80. Однако, когда он пытаетсяэто, я получаю следующую ошибку в журналах:

[HPM] GET /api/test -> http://mysite.local/api/
client_1    | [HPM] Error occurred while trying to proxy request /api/test from mysite.local:4200 to http://mysite.local/api/ (ECONNREFUSED) (https://nodejs.org/api/errors.html#errors_common_system_errors)

Я могу получить доступ к http://mysite.local/api/ напрямую без проблем. Кажется, что только прокси из :4200 не работает.

У меня есть докер-контейнер приложения Angular, контейнер nginx, который обслуживает PHP API, и контейнер php-fpm для PHP API.

Все выполняются через docker compose.

Вот весь соответствующий код и конфигурация.

Запись хоста Windows

127.0.0.1 mysite.local

URL-адреса

proxy.conf.json

{
    "/api/*" : {
        "target" : "http://mysite.local/api",
        "secure" : false,
        "logLevel" : "debug",
        "changeOrigin": true
    }
}

Команда Angular ng serve черезnpm run start

ng serve --proxy-config proxy.conf.json --host 0.0.0.0 --port 4200 --poll 1 --disableHostCheck

--host должно быть 0.0.0.0, чтобы приложение Angular было доступно.

docker-compose.yml

version: '3'
services:

  client:
    image: angular-cli:1.1
    volumes:
      - ./src/client:/var/www
    ports:
      - "4200:4200"
    command: >
      bash -c "cd /var/www && npm run start"

  api:
    image: laravel-app:1.5
    volumes:
      - ./src/server:/var/www
      - ./opcache.ini:/usr/local/etc/php/conf.d/opcache.ini
      - ./xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"
      - "DB_DATABASE=..."
      - "DB_USERNAME=..."
      - "DB_PASSWORD=..."
    depends_on:
        - database
        - web
    working_dir: /var/www

  web:
    image: nginx:1.10
    volumes:
      - ./src/server:/var/www
      - ./vhost.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "80:80"
      - "443:443"

  database:
    image: mysql:5.7.28
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      - "MYSQL_DATABASE=mysite"
      - "MYSQL_USER=..."
      - "MYSQL_PASSWORD=..."
      - "MYSQL_ROOT_PASSWORD=..."
    ports:
        - 33061:3306
volumes:
    dbdata:

Изображения Docker

Ни одно из изображений Docker, используемых в файле docker-compose, не предоставляет никаких портов. Все сопоставление портов выполняется через сам файл docker-compose.

nginx vhost.conf

server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

    server_name mysite.local www.mysite.local;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass api:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

Я не уверен, в чем проблема (например, конфигурация прокси, конфигурация nginx или конфигурация докера).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...