使用 docker-compose 我有多个容器在运行 - 其中一个是调用 API 的分析器容器,另一个容器 apiconnection 应该接收调用并发回信息。但是,当我运行撰写文件时,它总是返回 Get http://apiconnection:8080/maccaption: dial tcp: lookup apiconnection on 127.0.0.11:53: no such host
在 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 中运行。
我查看了这些其他资源以寻求帮助,但无济于事: how to call api endpoint inside docker container? Making a REST Call to Endpoint in Dockers Docker-compose internal communication using endpoints
如有任何指点,我们将不胜感激 - 谢谢!
**编辑 - 修复我不稳定的代码格式
最佳答案
对于将来尝试做类似事情的任何人:上面的代码实际上确实有效。但是我出错的地方是在我的 url := "http://apiconnection:8080/maccaption"
我指的是图像名称而不是我在 docker 中定义的服务名称-撰写。
更改 url 以查看服务名称而不是图像名称更正了问题,我现在能够在我的 dockerized 环境中进行 API 调用。
关于web-services - Docker-Compose API调用和端点容器化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54658573/