我的Dockerfile位于带有src/myapp文件夹的目录根目录中,myapp包含myapp.go主包.
Dockerfile 看起来如下:
FROM golang:1.9.2
ADD . /
RUN go build myapp;
ENTRYPOINT ["/go/bin/myapp"]
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
can't load package: package myapp: cannot find package "myapp" in any of:
/usr/local/go/src/myapp (from $GOROOT)
/go/src/myapp (from $GOPATH)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?ls在docker完成后我可以记录命令ADD吗?
Ish*_*ain 15
您正在将所有文件复制到 Image 根目录,未安装任何依赖项,尝试构建它,然后从/go/bin/app. 该目录中不存在二进制文件,并且会产生错误。
我建议使用这样的 Dockerfile,
FROM golang:1.9.2
ADD . /go/src/myapp
WORKDIR /go/src/myapp
RUN go get myapp
RUN go install
ENTRYPOINT ["/go/bin/myapp"]
Run Code Online (Sandbox Code Playgroud)
这将执行以下操作。
/go/src/myapp./go/src/myapp.您可以ls使用docker exec.
例子:
docker exec <image name/hash> ls
Run Code Online (Sandbox Code Playgroud)
您也可以在生成的图像中输入shell以使用
docker run --rm -it <image hash/name> /bin/sh
Run Code Online (Sandbox Code Playgroud)
经过实验,我采用这种方式构建Golang应用程序.
这种方式有几个优点:
依赖项安装在构建阶段
如果您需要,可以取消注释测试选项
构建大约800 MB的第一个全功能映像
将您的程序复制到一个新的空图像,并生成约10 MB的非常小的图像
Dockerfile:
# Two-stage build:
# first FROM prepares a binary file in full environment ~780MB
# second FROM takes only binary file ~10MB
FROM golang:1.9 AS builder
RUN go version
COPY . "/go/src/github.com/your-login/your-project"
WORKDIR "/go/src/github.com/your-login/your-project"
#RUN go get -v -t .
RUN set -x && \
#go get github.com/2tvenom/go-test-teamcity && \
go get github.com/golang/dep/cmd/dep && \
dep ensure -v
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /your-app
CMD ["/your-app"]
EXPOSE 8000
#########
# second stage to obtain a very small image
FROM scratch
COPY --from=builder /your-app .
EXPOSE 8000
CMD ["/your-app"]
Run Code Online (Sandbox Code Playgroud)
对于 go 1.11 ,您可以使用 go 模块,以下是示例
FROM alpine AS base
RUN apk add --no-cache curl wget
FROM golang:1.11 AS go-builder
WORKDIR /go/app
COPY . /go/app
RUN GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /go/app/main /go/app/cmd/myapp/main.go
FROM base
COPY --from=go-builder /go/app/main /main
CMD ["/main"]
Run Code Online (Sandbox Code Playgroud)
小智 5
官方文档建议使用以下 Dockerfile:
FROM golang:1.8
WORKDIR /go/src/app
COPY . .
RUN go get -d -v ./...
RUN go install -v ./...
CMD ["app"]
Run Code Online (Sandbox Code Playgroud)
请访问https://hub.docker.com/_/golang了解更多信息
| 归档时间: |
|
| 查看次数: |
5555 次 |
| 最近记录: |