使用docker-compose,我运行了多个容器-其中一个是调用API的探查器容器,另一个容器apiconnection应该接收调用并发回信息。但是,当我运行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文件中分配的端口。并在我的apiconnection图像中接收到请求,如下所示:
r := mux.NewRouter()
r.HandleFunc("/maccaption", handleMaccaption).Methods("GET")
http.ListenAndServe(":8080", r)
它现在所要做的就是启动并发出一个请求来证明它正在工作,并返回一些json信息。此代码在docker之外工作,将url变量中的容器名称替换为localhost。但我无法让它在docker中运行。
我曾向这些其他来源寻求帮助,但都无济于事:如何在docker容器中调用api端点?在Dockers中对端点进行REST调用Docker使用端点编写内部通信
任何建议都将不胜感激-谢谢!
**编辑-修复我不稳定的代码格式
对于将来尝试这样做的人来说:上面的代码实际上确实有效。但我的错误之处在于,在我的url := "http://apiconnection:8080/maccaption"
中,我引用的是映像名称,而不是我在docker compose中定义的服务名称。
更改url以查看服务名称而不是图像名称纠正了这个问题,现在我可以在我的dockerized环境中进行API调用。