我对golang有点新意,我仍然试图了解go run main.go
和go build [-o] main.go
之间的区别。
我已经建立了一个小杜松子酒应用程序,可以在本地试用docker和kubernetes。
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/healthz", func(c *gin.Context) {
c.String(http.StatusOK, "")
})
r.GET("/readinez", func(c *gin.Context) {
c.String(http.StatusOK, "")
})
r.Run() // listen and serve on 0.0.0.0:8080
}
该应用与go run main.go
完美搭配。
我的Dockerfile:
FROM golang:latest
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]
失败了:
肯定在那里,它也适用于我go run main.go
。建立有什么区别?
我不知道该怎么做。来自节点背景。这确实让诺贝有点疯狂......当然有一个简单的解决方案。
答案 0 :(得分:2)
程序在您的计算机上成功,因为您可能已安装了gin软件包。您不能假设容器会拥有它,并且应该明确地安装它。只需在go build
行之前将以下行添加到dockerfile:
RUN go get github.com/gin-gonic/gin
答案 1 :(得分:0)
它可能已失败,因为您使用了杜松子酒,并且在容器内找不到该库。尝试使用glide或godep来销售第三方库。
答案 2 :(得分:0)
go get github.com/gin-gonic/gin
然后它应该工作。