博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go应用程序使用dockerfile multi-stage的问题
阅读量:6941 次
发布时间:2019-06-27

本文共 914 字,大约阅读时间需要 3 分钟。

  hot3.png

场景重现

一个简单的go应用,准备通过docker部署,为了减少运行时的镜像和容器体积,使用了multi-stage构建:

# dockerfile 大致如下# 一级构建使用带golang环境的镜像FROM golang:1.8.3 AS app-buildWORKDIR /go/src/app/RUN go install# 生成可执行文件 # 二级构建使用alpine:3.7,体积小FROM alpine:3.7# 拷贝上面一级构建中生成的可执行文件COPY --from=golb-build ./go/bin/app .ENTRYPOINT ["/go/bin/app"]

dockefile生成构建是正常,运行container的时候会报错:

docker run --name app-1 --publish 80:80 -it app:lateststandard_init_linux.go:195: exec user process caused "no such file or directory"

问题原因

据说是镜像golangalpine的操作系统虽然都是linux,但是底层架构不一样,所以在golang镜像生成的可执行文件没法在alpine操作系统上运行(在哪里看到的英文解释,再看到的话补上链接)

  • debian/ubuntu等linux下通用的是glibc;
  • 但alpine下使用的musl libc.

解决方案

  1. 尝试用带golang环境的alpine镜像来构建,然后把构建生成的可执行文件拷贝到纯净的alpine镜像中,这样就不存在上面的问题了.
    • 尝试使用镜像golang:1.9.4-alpine3.7,发现执行到go get -v .时保存,该镜像内不包含git工具...
    • 构建镜像中安装git工具apk add --no-cache git...
    • 最后镜像生成,容器运行成功.镜像大小仅有13MB...
  2. 尝试golang的交叉编译
    • 对交叉编译不是很了解...有机会再尝试

参考文档

转载于:https://my.oschina.net/taadis/blog/1622028

你可能感兴趣的文章
APACHE动态和静态编译区别
查看>>
音视频封装格式、编码格式知识
查看>>
Linux 系统开启VNC服务
查看>>
一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试...
查看>>
谈谈Ext JS的组件——布局的使用方法
查看>>
python入门书籍
查看>>
雷林鹏分享:CodeIgniter文件上传错误:the filetype you are attempting to upload is not allowed...
查看>>
雷林鹏分享:PHP 命名空间(namespace)
查看>>
Alpha冲刺随笔集
查看>>
js call
查看>>
Java(第六章)
查看>>
Golang 笔记 5 go语句
查看>>
ThinkPHP技术
查看>>
c#接口和抽象类的区别[转]
查看>>
2019-05-16 Java学习日记之面向对象_继承&方法&final
查看>>
vue单页面程序
查看>>
[转]KVC/KVO
查看>>
windows 2008 r2服务器密码忘记解决办法(RAID5磁盘阵列)
查看>>
nginx(web)应用实践
查看>>
筑泰防务与中山市公安局携手共同打造双系统警用移动管控——“智慧新警务”...
查看>>