多阶段构建映像不起作用,而普通构建却起作用

时间:2018-08-02 14:17:06

标签: docker go twitter-streaming-api docker-multi-stage-build

我有一个Dockerfile,它从最新的golang docker映像(现在为1.10.3)构建一个golang项目(侦听Twitter流并通过某些过滤器列出推文),如下所示:

FROM golang:1.10.3
COPY . /destination/
WORKDIR /destination/
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
CMD ["./main"]

,当我运行由docker build命令创建的映像时,它运行没有问题。问题在于图像的大小约为900MB。

当我尝试使用多阶段构建来构建docker时,就像这样:

FROM golang:1.10.3-alpine3.7 as builder
...
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
FROM busybox
COPY --from=builder /go/src/github.com/mygithubname/ /
WORKDIR /path-to-the-main-file/
CMD ["./main"]

泊坞窗映像已成功构建并运行,但是它在发布时仅不向我显示推文,也没有显示任何错误,这是最令人困惑的部分。即使当我将ssh放入正在运行的容器并ping谷歌时,它也会显示应有的一切。

有人暗示我如何调试此问题,或者从正在运行的Docker映像中获取更多日志?

1 个答案:

答案 0 :(得分:0)

几件事

1)容器是否退出?如果您使用docker ps,它似乎正在运行。

2)您是否检查了docker log {container id}

3)/go/src/github.com/mygithubname/是否真正反映了Docker容器第一阶段中构建的位置? 样本docker文件,其中副本反映了构建环境的工作目录:

FROM golang AS build-env
ADD . /src/project
WORKDIR /src/project
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

# final stage
FROM busybox
WORKDIR /app
COPY --from=build-env /src/project/ .
CMD ["./main"]