程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Docker Go 构建不为 HTTP 服务器提供服务大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Docker Go 构建不为 HTTP 服务器提供服务?

开发过程中遇到Docker Go 构建不为 HTTP 服务器提供服务的问题如何解决?下面主要结合日常开发的经验,给出你关于Docker Go 构建不为 HTTP 服务器提供服务的解决方法建议,希望对你解决Docker Go 构建不为 HTTP 服务器提供服务有所启发或帮助;

尝试为我的 Go 应用程序创建一个 Docker 容器 - 它在端口 8080 上创建一个 http 服务器:

package main
import (
    "net/http"
)

func main() {
    http.HandleFunc("/",doX)
    if err := http.ListenAndServe("localhost:8080",nil); err != nil {
        panic(err)
    }
}

func doX(w http.ResponseWriter,r *http.Request) {
    x
}

当我运行 go build 然后转到 localhost:8080 时它可以工作,但是当我尝试在 Docker 中构建和运行它时它没有响应:

# Start from the latest golang base image
FROM golang:1.14.3-alpine

# Set the Current Working Directory insIDe the container
workdir /app

# copy the source from the current directory to the Working Directory insIDe the container
copY /src .

# Build the Go app
RUN go build -o main .

# Expose port 8080 to the outsIDe world
EXPOSE 8080

# Command to run the executable
CMD ["./main"]

我正在运行的命令是:

docker build -t src 。 docker run -d -p 8080:8080 src

我所有的 .go 文件都在一个名为“src”的目录中。感谢帮助 - Docker 新手,谢谢!

解决方法

将主机从 localhost 更改为 0.0.0.0。没事的。 即

func main() {
    http.HandleFunc("/",doX)
    if err := http.ListenAndServe("0.0.0.0:8080",nil); err != nil {
        panic(err)
    }
}

环回的主要思想是在同一主机上提供资源。如果您要公开端口,则主机会发生变化,因此应该抛出 connection reset by peer 类型的错误。

或者,如果您的 golang 应用程序需要在不同图像的其他容器之间进行通信,您可能希望创建一个网络。 所以首先需要创建一个新网络。

docker network create <network_name> 

然后在启动这个 go 容器和不同的容器时(如果需要的话)传递 network 标志以使它们在同一子网下可用。

docker run --network <network_name> -d -p 8080:8080 src

如果您不想这样做,请在 docker 的 host 网络上运行容器(PS。这不是标准做法,但有利于调试)。如果您在 host 网络中使用 localhost 处的 http.ListenAndServe 运行您的 src 映像,您会立即注意到它是可访问的,但是在 docker 的 bridge 网络模式下公开端口时,无法访问。所以应用程序设置中肯定有一些错误,它对外部网络是不可见的。

 docker run -d --network host src

谢谢:)

大佬总结

以上是大佬教程为你收集整理的Docker Go 构建不为 HTTP 服务器提供服务全部内容,希望文章能够帮你解决Docker Go 构建不为 HTTP 服务器提供服务所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: