gpt4 book ai didi

docker - 通信运行 golang 的多个容器

转载 作者:数据小太阳 更新时间:2023-10-29 03:32:13 24 4
gpt4 key购买 nike

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

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

This post做同样的事情,但它使用 github 存储库并构建它。

我是 golangDocker 的新手,所以任何能让这个简单应用正常运行的建议都很好。

这是我的文件夹结构。

- addmodule
- add.go
- Dockerfile
- mainmodule
- main.go
- Dockerfile

- docker-compose.yml
addmodule

中的

Dockerfile

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" ]
mainmodule

中的

Dockerfile

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)

}

我的 main.gomainmodule

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可以达到mainmodule通过:http://mainmodule

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

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

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

EXPOSE 7070

您的 http 应该绑定(bind)到 0.0.0.0 而不是 localhost。这确保可以从容器外部访问该服务:

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/

关于docker - 通信运行 golang 的多个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57646760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com