3

我有一个 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"]

docker 映像已成功构建并运行,但它只是在发布推文时不向我显示推文,而且它也没有显示任何错误,这是最令人困惑的部分。即使我 ssh 进入正在运行的容器并 ping google,它也会显示应有的一切。

任何人都有一些提示我可以如何调试这个问题,或者从正在运行的 Docker 映像中获取更多日志?

4

1 回答 1

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"]
于 2018-08-02T18:50:12.113 回答