Docker-Compose API Call и конечная точка в контейнерах - PullRequest
0 голосов
/ 12 февраля 2019

Используя docker-compose, у меня запущено несколько контейнеров - один из них является контейнером профилировщика, который вызывает API, другой контейнер apiconnection должен получать вызов и отправлять информацию обратно.Однако, когда я запускаю файл compose, он всегда возвращает Get http://apiconnection:8080/maccaption: dial tcp: lookup apiconnection on 127.0.0.11:53: no such host в контейнере Profiler в строке http.DefaultClient.Do.

Это пример моего файла compose:

apiConnection:
 image: apiconnection:1.0
 ports:
  - "8080:8080"
 networks: 
  - maccaptionNet
profiler:
  image: profiler:1.0
  networks: 
   - maccaptionNet
  depends_on:
   - "apiConnection"

I 'Я вызываю API в моем изображении профилировщика следующим образом - он выдает ошибку DefaultClient:

url := "http://apiconnection:8080/maccaption"

req, err := http.NewRequest("GET", url, nil)
if err != nil {
    log.Fatal(err)
}

res, err := http.DefaultClient.Do(req)
if err != nil {
    fmt.Println("Line 27")
    log.Fatal(err)
}

body, err := ioutil.ReadAll(res.Body)
if err != nil {
    fmt.Println("Line 33")
    log.Fatal(err)
}

Если я изменю url := "http://apiconnection:8080/maccaption", чтобы посмотреть на localhost следующим образом url := "http://localhost:8080/maccaption" он изменится на connect refused,но я не думаю, что я должен смотреть на localhost, мне нужно посмотреть на контейнер Docker, не так ли?

Я устанавливаю URL как соединение с контейнером Docker и использую порты, которые я назначил в файле docker-compose.и получаю запрос в моем изображении apiconnection, как это:

    r := mux.NewRouter()

r.HandleFunc("/maccaption", handleMaccaption).Methods("GET")

http.ListenAndServe(":8080", r)

Все, что он должен сделать сейчас, это запустить и сделать один запрос, чтобы доказать, что он работает, и вернуть некоторую информацию json.Этот код работает вне docker, заменяя имя контейнера в переменной url на localhost.Но я не могу запустить его в докере.

Я обратился к этим другим источникам за помощью, но безрезультатно: как вызвать конечную точку API внутри контейнера Docker? Выполнение REST-вызова к конечной точке в Dockers Docker - создание внутренней связи с использованием конечных точек

Будем весьма благодарны за любые указатели - спасибо!

** РЕДАКТИРОВАТЬ - чтобы исправить мое чудное форматирование кода

1 Ответ

0 голосов
/ 13 февраля 2019

Для тех, кто пытается сделать что-то подобное в будущем: приведенный выше код на самом деле работает .Но я ошибался в том, что в моем url := "http://apiconnection:8080/maccaption" я ссылался на имя образа, а не на имя сервиса, которое я определил в docker-compose.

Изменение URL-адреса для просмотра имени службы вместо имени изображения устранило проблему, и теперь я могу выполнять вызовы API в моей среде dockerized.

...