使用 docker-compose 我有多个容器在运行 - 其中一个是调用 API 的分析器容器,另一个容器 apiconnection 应该接收调用并将信息发回。但是,当我运行撰写文件时,它总是在行Get http://apiconnection:8080/maccaption: dial tcp: lookup apiconnection on 127.0.0.11:53: no such host
的 Profiler 容器上返回http.DefaultClient.Do
。
这是我的撰写文件的示例:
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 端点? 在 Docker 中对端点进行 REST 调用Docker-compose 使用端点进行内部通信
任何指针将不胜感激 - 谢谢!
**编辑 - 修复我不稳定的代码格式
对于将来尝试做这样的事情的任何人:上面的代码确实有效。但是我出错的地方是,在我的文件中,url := "http://apiconnection:8080/maccaption"
我指的是图像名称而不是我在 docker-compose.yml 文件中定义的服务名称。
更改 url 以查看服务名称而不是图像名称纠正了这个问题,我现在可以在我的 dockerized 环境中进行 API 调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句