通信运行 golang 的多个容器

  • 本文关键字:运行 golang 通信 docker go
  • 更新时间 :
  • 英文 :


我正在尝试使用golangDocker制作简单的微服务

我不明白如何从mainmodule调用add.go函数.

这篇文章做同样的事情,但它使用github存储库并构建它。

我是golangDocker新手,所以任何使这个简单的应用程序工作的建议都会很棒。

这是我的文件夹结构。

- addmodule
- add.go
- Dockerfile
- mainmodule
- main.go
- Dockerfile
- docker-compose.yml

Dockerfileaddmodule

FROM   golang:alpine
RUN apk update
COPY . /go/src
WORKDIR /go/src
RUN go build -o add .
EXPOSE 7070
RUN chmod 755 add
CMD [ "./add" ]

Dockerfilemainmodule

FROM golang:alpine
RUN apk update
COPY . /go/src
WORKDIR /go/src
CMD [ "go","run","main.go" ]

docker-compose.yml

version: '3'
services:
addmodule:
image: addmodule
build:
context: ./addmodule
dockerfile: Dockerfile
depends_on:
- mainmodule
mainmodule:
image : mainmodule
build:
context: ./mainmodule
dockerfile: Dockerfile

我的add.go

package main
import (
"log"
"net/http"
)
func add(reswt http.ResponseWriter, req *http.Request) {
log.Println("Request came to here")
}
func main() {
http.HandleFunc("/add", add)
http.ListenAndServe("0.0.0.0:7070", nil)
}

我在mainmodulemain.go

package main
import (
"log"
"net/http"
)
func main() {
log.Println("From main package")
res, err := http.Get("0.0.0.0:7070/add")
if err != nil {
log.Println("couldnt send get request")
}
log.Println(res)
}

当我跑sudo docker-compose up --build时,我只是得到couldnt send get request

PS :根据@MaartenDev的建议使用修改代码编辑的问题

Docker compose 默认创建一个网络。服务名称可用于访问同一网络中的包含。

version: '3'
services:
addmodule:
image: addmodule
build:
context: ./addmodule
dockerfile: Dockerfile
depends_on:
- mainmodule
mainmodule:
image : mainmodule
build:
context: ./mainmodule
dockerfile: Dockerfile

mainmodule可以通过连接到http://addmodule:<port>来访问添加模块,addmodule可以通过以下方式到达mainmodulehttp://mainmodule

这假设这些是 http 服务。任何其他传输都将起作用,因为addmodulemainmodule是使用 DNS 提供的。

使用自定义端口时,请确保端口在 Dockerfile 中公开:

FROM   golang:alpine
RUN apk update
COPY . /go/src
WORKDIR /go/src
EXPOSE 7070

您的 http 应该绑定到 0.0.0.0 而不是本地主机。这可确保可从容器外部访问服务:

http.ListenAndServe("0.0.0.0:7070", nil)

主代码应使用以下内容:

package main
import (
"log"
"net/http"
)
func main() {
log.Println("From main package")
res, err := http.Get("http://addmodule:7070/add")  // The mistake I made after a long chat. forgot http://
if err != nil {
log.Println("couldnt send get request")
}
log.Println(res)
}

阅读有关默认网络的更多信息:https://docs.docker.com/compose/networking/

最新更新