当前位置: 首页 > news >正文

Golang alpine Dockerfile 最小打包

最近在ubantu 上进行了 iris项目的alpine 版本打包,过程遇到了一些问题,记录一下。
golang版本 :1.18
系统:ubantu

代码结构

在这里插入图片描述

Dockfile内容

FROM alpine:latest
MAINTAINER Si Wei<3320376695@qq.com>
ENV VERSION 1.1
ENV GO111MODULE=on
ENV CGO_ENABLED 0
WORKDIR /app
RUN mkdir -p /usr/share/zoneinfo/Asia/
COPY deploy/Shanghai /usr/share/zoneinfo/Asia/Shanghai
COPY qycloud-irisOps /app/qycloud-irisOps
COPY config /app/config
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
ENV LANG C.UTF-8
EXPOSE 8080
ENTRYPOINT ["./qycloud-irisOps"]

错误解决过程

二进制包 qycloud-irisOps 是通过:go build -o qycloud-irisOps 生成的
为啥我的go项目 build打包docker后报这个错误呢
docker: Error response from daemon: failed to create shim: OCI runtime create failed: runc create failed: unable to start container process: exec: “qycloud-irisOps”: executable file not found in $PATH: unknown.

一开始我以为是 文件 ,也就是 ENTRYPOINT [“./qycloud-irisOps”] 这里的问题,在求助同事和朋友之后,很多人第一反应也都是我这里写错了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据讨论,我进去容器 去验证了,其实是有这个目录和文件的。 docker run -it --entrypoint "" 镜像名 /bin/sh
在这里插入图片描述

那么问题就不是 entrypoint 和 copy 的问题。 排除dockerfile问题。

问题所在

其实这里not found不是说找不到这个程序,而是找不到需要的动态连接库,
go语言是静态编洋型的语言,即使这个程序非常简单,但是它还是依颜了动态链接库,这个动态链接库是系统内置的,而我编译用的系统是ubantu,要在alipline上运行,在ubuntu上用的是glibc.alpine为了追求轻量,选择了musl libc,因此我的程序无法下常动态链接

所以编译的时候禁用外部函数,静态编译。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
综上所述,编译时添加参数CGO_ENABLED=0,关闭CGO就可以了:

# 禁用CGO
CGO_ENABLED=0 go build -o qycloud-irisOps
# 
docker build -t irisops_docker:v1.0 .
docker run -itd --name=irisGo irisops_docker:v1.0

新的问题

在禁用CGO编译之后,确实可以正常起 docker 启动 go 服务了,但是又报了 mysql.go 的链接错误,这是因为

connString := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True&interpolateParams=true&loc=", c.User, c.Password, c.Host, c.Port, c.Database, c.Charset)connString = connString + "Asia%2FShanghai"var err errorDB, err = gorm.Open("mysql", connString)if err != nil {iris.New().Logger().Error("err is", err)iris.New().Logger().Error("connString is", connString)log.Panic(err)os.Exit(-1)}

这里面 c.Host 的127.0.0.1 在docker中是找不到的,所以 ,改动这里的配置 为 mysql ,然后在 docker run 的时候 改成下面这样 。

docker run --link mysql:mysql -itd --name=irisGo irisops_docker:v1.0

这样mysql报错的问题就解决了。

总结

CGO_ENABLED=0 go build -o qycloud-irisOps -tags netgodocker run -itd --name=irisGo irisops_docker:v1.0docker run --link mysql:mysql -itd --name=irisGo irisops_docker:v1.0

相关文章:

Golang alpine Dockerfile 最小打包

最近在ubantu 上进行了 iris项目的alpine 版本打包&#xff0c;过程遇到了一些问题&#xff0c;记录一下。 golang版本 &#xff1a;1.18 系统&#xff1a;ubantu 代码结构 Dockfile内容 FROM alpine:latest MAINTAINER Si Wei<3320376695qq.com> ENV VERSION 1.1 ENV G…...

在NVIDIA JetBot Nano小车上更新WIFI驱动

前言:树莓派上的WIFI驱动类型比较多&#xff0c;经常有更好驱动的需求本文给出RealTek的无线WIFI模组&#xff0c;8821CU的驱动更新办法步骤第一 通过其他方式连接网络小车通过网线或者老的WIFI连接到网络上第二 构建驱动模块并下载驱动首先&#xff0c;我们需要打开一个ubuntu…...

2023年网络安全最应该看的书籍,弯道超车,拒绝看烂书

学习的方法有很多种&#xff0c;看书就是一种不错的方法&#xff0c;但为什么总有人说&#xff1a;“看书是学不会技术的”。 其实就是书籍没选对&#xff0c;看的书不好&#xff0c;你学不下去是很正常的。 一本好书其实不亚于一套好的视频教程&#xff0c;尤其是经典的好书…...

VSYNC研究

Vsync信号是SurfaceFlinger进程中核心的一块逻辑&#xff0c;我们主要从以下几个方面着手讲解。软件Vsync是怎么实现的&#xff0c;它是如何保持有效性的&#xff1f;systrace中看到的VSYNC信号如何解读&#xff0c;这些脉冲信号是在哪里打印的&#xff1f;为什么VSYNC-sf / VS…...

python gRPC:根据.protobuf文件生成py代码、grpc转换为http协议对外提供服务

文章目录python GRPC&#xff1a;根据.protobuf文件生成py代码grpcio-tools安装和使用python GRPC的官网示例grpc转换为http协议对外提供服务工作问题总结grpc-ecosystem/grpc-gateway/third_party/googleapis: warning: directory does not exist.python GRPC&#xff1a;根据…...

Allegro如何输出ODB文件操作指导

Allegro如何输出ODB文件操作指导 在PCB设计完成之后,需要输出生产文件用于生产加工,除了gerber文件可以用生产制造,ODB文件同样也可以用于生产,如下图 用Allegro如何输出ODB文件,具体操作如下 首先确保电脑上已经安装了ODB这个插件,版本不受限制点击File...

koa-vue的分页实现

1.引言 最近确实体会到了前端找工作的难处&#xff0c;不过大家还是要稳住心态&#xff0c;毕竟有一些前端大神说的有道理&#xff0c;前端发展了近20年&#xff0c;诞生了很多leader级别的大神&#xff0c;这些大神可能都没有合适的坑位&#xff0c;我们新手入坑自然难一些&am…...

安全开发基础 -- DAST,SAST,IAST简单介绍

安全开发基础-- DAST&#xff0c;SAST&#xff0c;IAST 简介 DAST 动态应用程序安全测试&#xff08;Dynamic Application Security Testing&#xff09;技术在测试或运行阶段分析应用程序的动态运行状态。它模拟黑客行为对应用程序进行动态攻击&#xff0c;分析应用程序的反…...

网络安全之暴力破解介绍及暴力破解Tomcat

网络安全之暴力破解介绍及应用场景一、暴力破解介绍1.1 暴力破解介绍1.2 暴力破解应用场景一、暴力破解Tomcat一、暴力破解介绍 1.1 暴力破解介绍 暴力破解字典&#xff1a;https://github.com/k8gege/PasswordDic 1.2 暴力破解应用场景 一、暴力破解Tomcat 登录Tomcat后台&a…...

Elasticsearch:使用 Logstash 构建从 Kafka 到 Elasticsearch 的管道 - Nodejs

在我之前的文章 “Elastic&#xff1a;使用 Kafka 部署 Elastic Stack”&#xff0c;我构建了从 Beats > Kafka > Logstash > Elasticsearch 的管道。在今天的文章中&#xff0c;我将描述从 Nodejs > Kafka > Logstash > Elasticsearch 这样的一个数据流。在…...

记录一次es的性能调优

文章目录es性能调优启用g1垃圾回收器es性能调优 成都的es集群经常出现告警&#xff0c;查看日志发现 [gc][11534155] overhead, spent [38.3s] collecting in the last [38.6s]这是 JVM 垃圾回收过程中的一条日志&#xff0c;表示在最近 38.6 秒内&#xff0c;JVM 进行了一次…...

内核性能评估测试及具体修改操作步骤记录

步骤记录前言一、查看环境配置二、LRU缓存空间调整三、进程扫描时间间隔四、与其他内核对比的工作负载测试&#xff08;另一个内核的编译&#xff09;总结前言 记录的相关操作有&#xff1a;查看服务器硬件环境、LRU缓存大小修改、内核命名、内核编译以及进程执行周期的设置。…...

S7-200smart远程无线模拟量信号采集案例

本参考方案使用西门子PLCS7-200SMART 结合无线通讯终端DTD434MC和DTD433F实现 PLC对远端设备模拟量的远程无线输入输出查询控制。所使用到的设备&#xff1a;西门子S7-200smartPLC无线数据终端DTD434MC无线模拟量信号测控终端DTD433F所使用的协议&#xff1a;ModbusRTU协议方案…...

Blender Python材质处理入门

本文介绍在 Blender 中如何使用 Python API 获取材质及其属性。 推荐&#xff1a;用 NSDT场景设计器 快速搭建3D场景。 1、如何获取材质 方法1、 获取当前激活的材质 激活材质是当前在材质槽中选择的材料。 如果你选择一个面&#xff0c;则活动材料将更改为分配给选定面的材质…...

ChatGPT后劲很大,问题也是

ChatGPT亮相即封神&#xff0c;最初的访客是程序员、工程师、AI从业者、投资人&#xff0c;最后是无数懵懂又好奇的普通人&#xff1a;ChatGPT是什么&#xff1f;自己会被ChatGPT取代吗&#xff1f;看待ChatGPT的立场也是两个极端&#xff1a; 快乐&#xff0c;是因为ChatGPT太…...

世界那么大,你哪都别去了,来我带你了解CSS3 (二)

文章目录‍❤️‍&#x1f525;CSS文档流‍❤️‍&#x1f525;CSS浮动‍❤️‍&#x1f525;CSS定位‍❤️‍&#x1f525;CSS媒体查询‍❤️‍&#x1f525;CSS文档流 文档流是文档中可显示对象在排列时所占用的位置/空间。 例如&#xff1a;块元素自上而下摆放&#xff0c;内…...

2023年再不会Redis,就要被淘汰了

目录专栏导读一、同样是缓存&#xff0c;用map不行吗&#xff1f;二、Redis为什么是单线程的&#xff1f;三、Redis真的是单线程的吗&#xff1f;四、Redis优缺点1、优点2、缺点五、Redis常见业务场景六、Redis常见数据类型1、String2、List3、Hash4、Set5、Zset6、BitMap7、Bi…...

Java SPI机制了解与应用

1. 了解SPI机制 我们在平时学习和工作中总是会听到Java SPI机制&#xff0c;特别是使用第三方框架的时候&#xff0c;那么什么是SP机制呢&#xff1f;SPI 全称 Service Provider Interface&#xff0c;是 Java 提供的一套用来被第三方实现或者扩展的接口&#xff0c;它可以用来…...

vue实现输入框中输完后光标自动跳到下一个输入框中

前言 最近接到这么一个需求&#xff0c;做一个安全码的输入框&#xff0c;限制为6位数&#xff0c;但是每一个写入的值都是一个输入框&#xff0c;共计6个输入框&#xff0c;当前输入框写入值后&#xff0c;光标自动跳到下一个输入框中&#xff0c;删除当前输入框写入的值后再自…...

如何构建 C 语言编译环境?

C语言是一种通用的编程语言&#xff0c;它是由Dennis Ritchie于20世纪70年代初在贝尔实验室开发的。C语言的设计目标是提供一种结构化、高效、可移植的编程语言&#xff0c;以支持系统编程和应用程序开发。C语言广泛用于开发操作系统、网络设备、游戏、嵌入式系统、桌面应用程序…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...