Web Services 对接器-编写API调用和端点容器化

xt0899hw  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(170)

使用docker-compose,我有多个容器在运行-其中一个是调用API的Profiler容器,另一个容器apconnection应该接收调用并发回信息。但是,当我运行compose文件时,它总是在Profiler容器的http.DefaultClient.Do行返回Get http://apiconnection:8080/maccaption: dial tcp: lookup apiconnection on 127.0.0.11:53: no such host
这是我的合成文件的示例:

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

我在我的分析器映像中调用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文件中分配的端口,然后在我的apconnection图像中接收请求,如下所示:

r := mux.NewRouter()

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

http.ListenAndServe(":8080", r)

它现在所要做的就是启动并发出一个请求来证明它正在工作,并返回一些JSON信息。这段代码可以在Docker之外工作,用LocalHost替换url变量中的容器名称。但是我无法让它在Docker内运行。
我已经看了这些其他来源的帮助,但无济于事:how to call api endpoint inside docker container?Making a REST Call to Endpoint in DockersDocker-compose internal communication using endpoints
任何指示将不胜感激-谢谢!

**EDIT -修复我不稳定的代码格式

atmip9wb

atmip9wb1#

对于那些将来想做类似事情的人:上面的代码确实可以工作,但是我的错误在于在我的url := "http://apiconnection:8080/maccaption"中我引用了图像名称,而不是我在docker-compose中定义的服务名称。
通过将url更改为查看服务名称而不是图像名称,解决了这个问题,现在我可以在停靠的环境中进行API调用了。

相关问题