2016-04-01 3 views
2

Я создаю веб-приложение с помощью Angular.js 2, Elasticsearch и Docker.Ошибка при получении http-запроса через связанные контейнеры докеров

Я пытаюсь получить доступ к Elasticsearch через свой REST API из моего приложения с угловым кодом, используя связанный URL-адрес «http://search:9200/_cat/health», но я получаю ошибку GET http://search:9200/_cat/health net::ERR_NAME_NOT_RESOLVED.

Странно, что когда я делаю curl -XGET "http://search:9200/_cat/health" из контейнера веб-приложения, все в порядке, и я получаю правильный ответ.

Вот мой соответствующий docker-compose.yml файл

version: '2' 
services: 
    search: 
    image: elasticsearch:latest 
    command: elasticsearch -Des.network.host=0.0.0.0 
    ports: 
     - "9200:9200" 
     - "9300:9300" 
    web: 
    build: . 
    command: npm start 
    volumes: 
     - .:/visfx 
    ports: 
     - "3000:3000" 
    links: 
     - search 

также вот вызов службы elasticsearch

@Injectable() 
export class ElasticsearchService { 
    private _esUrl = 'http://search:9200'; 

    constructor(private http: Http) { } 

    getHealthString() { 
     let healthUrl = '/_cat/health'; 

     return this.http.get(this._esUrl + healthUrl) 
      .map(res => <string>res.text()) 
      .do(data => console.log(data)) 
      .catch(this.handleError); 
    } 
    ... 
} 
+0

Если этот javascript работает на стороне клиента, вам нужно будет использовать реальное DNS-имя, которое направляется на хост докера, поскольку имена докеров разрешаются только с помощью внутреннего распознавателя докера. – tpbowden

+0

Кроме того, docker compose автоматически создаст вашу частную сеть, поэтому вам не нужно явно указывать ссылки в конфиге. – tpbowden

+0

различные мысли ... я предполагаю, что docker сделал запись/etc/hosts для контейнера поиска внутри вашего веб-контейнера ... вы можете выполнить ping в контейнере поиска? - это IP-адреса, которые имеют доступ к этим ресурсам? есть ли какие-либо брандмауэры? – danday74

ответ

4

Если браузер работает на стороне клиента, вы должны будете использовать реальный DNS имя, которое направляется на хост докера, как имена докеров, разрешается только с помощью внутреннего распознавателя докера.

+1

Привет, У меня такая же проблема. Как я настраиваю это? Могу я попросить пример? –

Смежные вопросы