Go 应用程序使用 dockerfile multi-stage 的问题
场景重现
一个简单的go应用,准备通过docker部署,为了减少运行时的镜像和容器体积,使用了multi-stage构建:
# dockerfile 大致如下
# 一级构建使用带golang环境的镜像
FROM golang:1.8.3 AS app-build
WORKDIR /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:latest
standard_init_linux.go:195: exec user process caused "no such file or directory"
问题原因
据说是镜像golang和alpine的操作系统虽然都是linux,但是底层架构不一样,所以在golang镜像生成的可执行文件没法在alpine操作系统上运行(在哪里看到的英文解释,再看到的话补上链接)
- debian/ubuntu等linux下通用的是glibc;
- 但alpine下使用的musl libc.
解决方案
- 尝试用带golang环境的
alpine镜像来构建,然后把构建生成的可执行文件拷贝到纯净的alpine镜像中,这样就不存在上面的问题了.- 尝试使用镜像
golang:1.9.4-alpine3.7,发现执行到go get -v .时保存,该镜像内不包含git工具... - 构建镜像中安装
git工具apk add --no-cache git... - 最后镜像生成,容器运行成功.镜像大小仅有13MB...
- 尝试使用镜像
- 尝试golang的交叉编译
- 对交叉编译不是很了解...有机会再尝试
参考
Go 应用程序使用 dockerfile multi-stage 的问题的更多相关文章
- 基于官方Drone-CI 的alpine版本asia亚洲时区构建支持. Drone-CI based alpine Timezone Build
基于官方Drone-CI 的alpine版本最简化添加亚洲时区Dockerfile构建支持. iotd@Github: drone-ci-based-alpine-timezone-build 如添加 ...
- Dockerfile 中的 multi-stage
在应用了容器技术的软件开发过程中,控制容器镜像的大小可是一件费时费力的事情.如果我们构建的镜像既是编译软件的环境,又是软件最终的运行环境,这是很难控制镜像大小的.所以常见的配置模式为:分别为软件的编译 ...
- Dockerfile 中的 multi-stage(多阶段构建)
在应用了容器技术的软件开发过程中,控制容器镜像的大小可是一件费时费力的事情.如果我们构建的镜像既是编译软件的环境,又是软件最终的运行环境,这是很难控制镜像大小的.所以常见的配置模式为:分别为软件的编译 ...
- 开发Adobe AIR移动应用程序的考虑事项
http://www.adobe.com/cn/devnet/air/articles/considerations-air-apps-mobile.html Adobe AIR 经过发展演进,已经超 ...
- Win8 安装Oracle 10g 提示“程序异常终止”的解决方案
这段时间在做DRP,需要安装Oracle 10g的数据库,我的系统是win8企业版,安装Oracle 10g的时候,选择“高级安装”,提示“程序异常终止”,下面是几个解决方案,跟大家分享一下. 错误提 ...
- docker制作node程序镜像:
准备: 需要5个文件 新建一个docker文件夹 1 .ignore git忽略文件用的 2 pakage.json 安装NODE程序的 也可以直接拷贝进 docker文件加 3 node环境 lin ...
- 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序
http://blog.csdn.net/wingfourever/article/details/7726724 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX ...
- 注册Azure AD 2.0 应用程序
作者:陈希章 发表于 2017年3月22日 上一篇 介绍了Microsoft Graph应用程序的一些概念,以及目前还比较普遍的Azure AD 1.0应用程序的注册方式.但正如我多次提到的那样,虽然 ...
- 利用dockerfile定制镜像
利用dockerfile定制镜像 镜像的定制就是定制每一层所添加的配置.文件.如果可以吧每一层修改.安装.构建.操作的命令都写入到一个脚本,用脚本来构建.定制镜像,这个脚本就是dockerfile. ...
- 8、Dockerfile介绍和最佳实践
一.Dockerfile 概念 1.Dockerfile是什么 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如 ...
随机推荐
- (.net core)Kong网关的使用
一.优势: 提供统一的 API 管理,简化流量控制.负载均衡.安全性控制等工作. 有可视化界面可操作,支持高度 可扩展性,可以通过插件来扩展功能. 在 微服务架构 中表现优异,支持多种协议和高并发场景 ...
- Solution -「ZJOI 2018」「洛谷 P4338」历史
\(\mathscr{Description}\) Link. 给定一棵以 \(1\) 为根的树,点 \(u\) 有非负点权 \(a_u\). 定义 \(u\) 的一次染色的代价为:路径 ...
- ofd轻阅读---采用Typescript全新开发,让阅读、批注更方便!
前言 浏览器内核已支持pdf文件的渲染,这极大的方便了pdf文件的阅读和推广.ofd文件作为国产板式标准,急需一套在浏览器中渲染方案. 本人研究ofd多年,分别采用qt.c# 开发了ofd阅读器.本 ...
- K_V键值存储对比
memcached-键值存储 redis-键值存储 RocksDB-键值存储 KeyDB-键值存储 DynamoDB-键值存储 levelDB-键值存储 etcd-键值存储 Redis与其他数据库对比 ...
- w3cschool-微信小程序开发文档-API
https://www.w3cschool.cn/weixinapp/weixinapp-network-request.html 微信小程序API 发起请求 发起 HTTPS 网络请求.使用前请注意 ...
- 轮播图,swiper使用
背景: 最近接到一个需求,重写首页,需要用到轮播图. 但是轮播图只用两张图,此为前提. 本想直接用ElementUI的走马灯,但是只用两张图的情况下,走马灯不能循环播放,只能来回播放,公司的UI小姐姐 ...
- .NET Core 中如何构建一个弹性的 HTTP 请求机制?
1. 理解弹性 HTTP 请求机制 什么是弹性? 弹性是指系统在面对故障或异常情况时,能够保持或快速恢复到正常状态的能力.在 HTTP 请求的上下文中,弹性意味着当请求失败时,系统能够自动采取一系列措 ...
- 从理房间到移动零:一道考察数组操作的经典题目|LeetCode 283 移动零
LeetCode 283 移动零 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 你有没有整理过房间?常常会发现一些要丢掉的东西,但又不想立刻处 ...
- [文件格式/数据存储] Parquet:开源、高效的列式存储文件格式协议
序:缘起 => 用 java 读取 parquet 文件 生产环境有设备出重大事故,又因一关键功能无法使用,亟需将生产环境的原始MQTT报文(以 parquet 文件格式 + zstd 压缩格式 ...
- 全网最简单DeepSeek-R1本地部署教程
1.安装ollama 打开ollama网址:https://ollama.com/ 选择你电脑的系统进行下载 我的电脑是windows的就点击windows然后点击下载即可 下载完毕后双击打开下载的. ...