При настройке нескольких контейнеров не удается вызвать службу из другого контейнера при использовании Docker -Compose - PullRequest
0 голосов
/ 16 января 2020

Я использую docker compose с настройкой нескольких контейнеров. У меня есть приложение angular, развернутое на nginx и подключенное к порту 80. Во втором контейнере я размещаю .note core API, этот сервис возвращает строку.

В angular, я звоню по URL http://localhost/api/values

Посмотрите на мой прикрепленный файл docker compose.yml. С моей текущей настройкой, когда я нажимаю "http://localhost: 81 " в моем локальном браузере, я получаю желаемый результат.

Но в приложении Angular (http://localhost/api/values), вместо того, чтобы использовать «localhost», я хотел использовать «webapi» (http://webapi/api/values), я пробовал всевозможные варианты, но я не получаю желаемого результата. До сих пор я пытался использовать hostname, container_name, aliases и т. Д. c

Буду признателен, если вы укажете здесь на мою ошибку и поможете мне получить желаемый результат. Кроме того, я был бы признателен, если бы вы предложили лучший вариант, если мы запускаем несколько экземпляров в сервисе. net.

Как только эта проблема будет решена, я планирую развернуть ее на Azure, будут ли мне нужны какие-либо дополнительные настройки / конфигурации?

Вот мой файл yml

Заранее спасибо.

version: '3.7'

services:
  web:
    build: hello
    container_name: web
    hostname: web
    image: jayforu/hello
    networks:
      backend:
         #aliases: 
          #  - web
      #   ipv4_address: 172.16.238.01

    ports:
      - 81:80
  webapi:
    build: HelloApi
    container_name: webapi
    hostname: webapi
    image: jayforu/helloapi
    networks:
      backend:
         #aliases: 
          #  - webapi
        #ipv4_address: 172.16.238.02
    ports:
      - 80:80
networks:
  backend:
   # ipam:
      driver: bridge
    #  config:
     #   - subnet: "172.16.238.0/24"

1 Ответ

1 голос
/ 20 января 2020

Основываясь на комментариях, вот что вы должны сделать, чтобы это заработало

Создание изображений вручную и указание локально созданных изображений в docker -compose (я думаю, что это не требуется, так как вы создаете изображения внутри docker -compose)

# My docker compose installation doesn't support 3.7.
version: '3.6'

services:
  web:
    image: hello:latest
    networks:
      - backend
    ports:
        - 80:80
  webapi:
    image: helloapi2:latest
    networks:
      - backend
    ports:
      - 81:80
networks:
  backend:
      driver: bridge

Я изменил метод http.get url и port в hello-worl.service.ts на любой ваш хост, в моем случае я Я использую виртуальную машину, поэтому мои контейнеры развернуты на http://192.168.99.100 и прослушивают порт 81, как указано в docker -compose для службы webapi, в вашем случае, если его localhost, затем измените его на http://localhost:81

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable({
    providedIn: 'root'
})
export class HelloWorldService {
    constructor(private http: HttpClient) {
    }
    messages: string[];
    executeHelloWorldService(): Observable<boolean> {
      return this.http.get<string[]>('http://http://192.168.99.100:81/api/values').pipe(
        map((data: string[]) => {
          this.messages = data;
          return true;
        }));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...