构建docker image

时间:2017-11-25 14:01:51

标签: docker go

我对golang有点新意,我仍然试图了解go run main.gogo 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"]

失败了:

enter image description here

肯定在那里,它也适用于我go run main.go。建立有什么区别?

我不知道该怎么做。来自节点背景。这确实让诺贝有点疯狂......当然有一个简单的解决方案。

3 个答案:

答案 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

然后它应该工作。