docker - 多阶段构建图像不起作用,而正常构建可以

标签 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"]

docker 镜像构建成功并运行,但它只是在发布推文时不显示推文,也没有显示任何错误,这是最令人困惑的部分。即使当我通过 ssh 进入正在运行的容器并 ping google 时,它​​也会按应有的方式显示所有内容。

谁能给我一些提示,告诉我如何调试这个问题,或者如何从正在运行的 Docker 镜像中获取更多日志?

最佳答案

一些事情

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

2) 你检查docker log {container id}了吗

3)/go/src/github.com/mygithubname/是否实际反射(reflect)了docker容器第一阶段构建的位置? 示例 docker 文件,其中副本反射(reflect)了构建环境的工作目录:

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"]

关于docker - 多阶段构建图像不起作用,而正常构建可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51655871/

相关文章:

ubuntu - Docker 守护进程正在运行但无法连接

go - 使用 go build CGO_ENABLED 进行交叉编译 - 找不到警告 : libudev. so.1

date - time.AddDate() 不适用于仅解析时间,并将日期设置为今天?

go - 使用mustEmbedUnimplemented ***方法的grpc

http - 在golang中测试http.Pusher和推送功能

c# - 在巴基斯坦的 Twitter Streaming API 中传递经度和纬度

javascript - Nodejs 模块在不同设备中无法按预期工作

docker - 在运行时在Pod中创建其他容器的正确方法是什么?

docker - 将数据从一个 Pod 发送到专门在同一主机上运行的另一个 Pod (DaemonSet)

Facebook 粉丝专页与 Twitter Streaming API