无法在主机中的 curl 和 docker alpine 中的 golang 服务器之间进行连接

咕噜代码:


fmt.Println("server starting...")

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

    name, _ := os.Hostname()

    resp := fmt.Sprintf("hit %s", name)

    w.Write([]byte(resp))

})


http.ListenAndServe("127.0.0.1:8080", nil)

Dockerfile:


FROM alpine:latest

COPY ./server .

CMD [ "./server" ]

然后运行它:


$ docker run --rm -p 8080:8080 server

server starting...

它适用于容器(安装curl后):


$ docker exec 3c3 -it curl localhost:8080

hit 3c398d80ca79

但它在主机中不起作用:


$ curl localhost:8080

curl: (52) Empty reply from server

$ nc localhost 8080 

$ # nc exit immediatly

如果我运行而不是:nc -l -p 8080./server


$ docker run --rm -it -p 8080:8080 alpine:latest nc -l -p 8080

并在主机中运行它:


$ curl localhost:8080

然后我可以在容器中得到请求,并且everthing工作得很好。


那么,在高山图像中卷曲golang服务器时有什么问题呢?


大话西游666
浏览 100回答 2
2回答

慕慕森

您的 docker 文件中缺少您EXPOSE 8080

牛魔王的故事

我用代替,一切工作得很好!http.ListenAndServe(":8080", nil)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go