docker容器启动报错

2023-10-28

启动容器报错:

standard_init_linux.go:178: exec user process caused "no such file or directory"
  • 报错背景
    我需要启动一个golang项目的容器,然后在我的centos7环境下将golang源码build成了一个可执行文件,写了一个Dockerfile,生成了一个容器。但是容器报错,以下是我的dockerdile
FROM alpine
ADD server /usr/bin/
WORKDIR /data
CMD ["server"]

生成一个镜像没问题,生成容器的时候报了上面的错误
后来查到是因为系统的问题,我在centos下build的项目可执行文件,但是在Dockerfile里面,我用的是alpine镜像,这个镜像时ubuntu系统的,所以导致报了上面的错误

  • 解决方法:
    解决方法就是让源码在build成一个可执行文件和执行这个可执行文件时,都使用同样的系统,以下是两种解决方法:

方法一:如果你已经在centos环境build了可执行文件,那么你的Dockerfile应该这样写:

FROM centos:7
ADD server /usr/bin/
WORKDIR /data
CMD ["server"]

即在可执行文件执行的环境也使用centos的环境

方法二:我使用一个ubuntu的镜像来将源码build成一个可执行文件,同时也在ubuntu中执行这个可执行文件
以下是Dockerfile

FROM golang:1.11-alpine

ENV SERVER=/go/src/git.phjr.com/server

COPY . $server/

RUN cd /go/src/git.phjr.com/server \
&& go build

FROM alpine

ENV SACC=/go/src/git.phjr.com/server
COPY --from=0  $SACC/server /usr/bin
WORKDIR /data

CMD ["server"]

可以通过以上Dockerfile看到,我在将源码build为一个可执行文件时,使用的是golang:1.11-alpine,此镜像中带有需要的golang环境,同时也是一个ubuntu镜像,刚好和我执行环境是一样的系统

推荐使用第二种方法,这种方法可以将源码一键build成一个镜像,方便快捷,同时,alpine镜像体积非常小,性能当然会更好,其次就是docker的底层存储使用的是ubuntu系统,所以,在构建docker镜像时,最好采用ubuntu系统

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker容器启动报错 的相关文章

随机推荐

  • 美国设计师Aaron的Logo设计欣赏

    2007 02 16 作者 Aaron 出处 sj63 Aaron 来自美国洛杉矶 主要从事商标 标志设计
  • 解决HuggingFace加载预训练模型时报错TypeError: expected str, bytes or os.PathLike object, not NoneType

    完整报错 TypeError expected str bytes or os PathLike object not NoneType 解决方法 检查下载的组件 步骤1 完整的下载组件 包括bin文件的模型 配置文件和其他文件 尤其是to
  • 数据库系统原理练习题(十三)

    1 在数据库设计中 用E R图来描述信息结构但不涉及信息在计算机中的表示 它是数据库设计的 阶段 A 需求分析 B 概念设计 C 逻辑设计 D 物理设计 将E R模型转换成关系模型 属于数据库的 A 需求分析 B 概念设计 C 逻辑设计 D
  • AB实验的高端玩法系列4- 实验渗透低?用户未被触达?CACE/LATE

    CACE全称Compiler Average Casual Effect或者Local Average Treatment Effect 在观测数据中的应用需要和Instrument Variable结合来看 这里我们只讨论CACE的框架给
  • Java泛型的协变和逆变

    1 什么是泛型擦除 Java的泛型本质上不是真正的泛型 而是利用了类型擦除 type erasure 2 协变 covariant 和逆变 contravariant 2 1协变 covariant
  • Linux逻辑卷管理LVM

    前言 目前我们用的物理磁盘有内存限制 当我们把磁盘占满了 如果将文件放在其他磁盘对于以后的维护很是麻烦 单靠物理磁盘是无法解决空间增长的问题的这个时候逻辑卷就起到了很重要的作用 这篇文章的学习目标是 了解逻辑卷的优势特点 学会如何创建逻辑卷
  • 二维数组与稀疏数组之间的转换

    JAVA实现二维数组与稀疏数组之间的转换 一 什么是稀疏数组 稀疏数组 Sparse array 所谓稀疏数组就是数组中大部分的内容值都未被使用 或都为零 在数组中仅有少部分的空间使用 因此造成内存空间的浪费 为了节省内存空间 并且不影响数
  • JAVA循环结构

    1 循环结构特点 1 循环操作 2 循环条件 2 循环的四个步骤 1 初始化循环条件 2 循环条件 3 循环体 4 变更循环条件 3 while循环 while 循环条件 循环体 3 do while do 循环体 while 循环条件 分
  • Java上传图片文件

    PostMapping certificate public AjaxResult upCertificate MultipartFile file HttpServletRequest request AjaxResult ajax Aj
  • 素数之 积

    RSA加密算法在网络安全世界中无处不在 它利用了极大整数因数分解的难度 数据越大 安全系数越高 给定一个32位整数 请对其进行因数分解 找出是哪两个素数的乘积 思路 先判断是否为素数 再跟着条件走即可 JScript代码 let line
  • TortoiseSVN客户端重新设置用户名和密码

    在第一次使用TortoiseSVN从服务器CheckOut的时候 会要求输入用户名和密码 这时输入框下面有个选项是保存认证信息 如果选了这个选项 那么以后就不用每次都输入一遍用户名密码了 不过 如果后来在服务器端修改了用户名密码 则再次检出
  • RabbitMQ的交换机(主题模式)学习笔记

    视频地址 之前我们学习了扇出模式和直接模式 但是他们呢只能完成广播和到指定的某一个routingkey 但是如果我们想要像类似于正则表达式那样完成匹配即可接收就不行了 那么就可以使用主题模式来完成这个需要 主题模式 与扇出和直接模式差不多
  • Win10怎么添加开机启动项?Win10添加开机自动运行软件三种方法

    Win10管理开机启动项的方法相信大家已经非常熟悉 msconfig命令各系统都通用 那么很多用户发觉Win10和Win7 XP等系统不同 没有启动文件夹 那么我们怎么添加开机启动项呢 如晨软件或程序没有开机启动设置的话 是的 在Win10
  • LIMA和QLoRA论文解读

    LIMA Less Is More for Alignment paper https arxiv org abs 2305 11206 Meta在2023年5月发布了论文 LIMA Less Is More for Alignment 基
  • 容器化部署(prometheus+grafana)监控k8s集群

    prometheus images 下所有镜像导入到私有仓库 192 168 92 160 拷贝所有镜像到 master 的 images 目录下 root master images for i in gz do docker load
  • undefined reference to `vtable for’”问题的原因及解决方法

    在使用qt开发新项目时候 添加新的类是非常频繁的操作 有时候 手快 尤其程序员非常迷恋快捷键 doge 会不小心跳过一些关键步骤 导致出现一些问题 例如 undefined reference to vtable for 错误就很常见 QT
  • 获取百度搜索的返回结果

    基于request获取百度返回结果 本文基于request进行访问有可能导致SSLError 这有可能是由于本文是访问https所导致的 但这篇博客较完整地介绍了对html使用etree json对返回结果进行解析的操作 可以借鉴 Pyth
  • [Android studio] 第17节 Adapter适配器

    目录 一 Adapter是什么 二 Adapter详解 一 Adapter是什么 在 Android 开发中 适配器 Adapter 是一个关键的组件 用于将数据源绑定到界面上的视图组件 例如 ListView RecyclerView S
  • (转)自旋锁(spinlock) 解释得经典,透彻

    自旋锁与互斥锁有点类似 只是自旋锁不会引起调用者睡眠 如果自旋锁已经被别的执行单元保持 调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁 自旋 一词就是因此而得名 由于自旋锁使用者一般保持锁时间非常短 因此选择自旋而不是睡眠是非常必
  • docker容器启动报错

    启动容器报错 standard init linux go 178 exec user process caused no such file or directory 报错背景 我需要启动一个golang项目的容器 然后在我的centos