使用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 -修复我不稳定的代码格式
1条答案
按热度按时间atmip9wb1#
对于那些将来想做类似事情的人:上面的代码确实可以工作,但是我的错误在于在我的
url := "http://apiconnection:8080/maccaption"
中我引用了图像名称,而不是我在docker-compose中定义的服务名称。通过将url更改为查看服务名称而不是图像名称,解决了这个问题,现在我可以在停靠的环境中进行API调用了。