【云计算 | Docker】Docker容器后台运行不了?entrypoint在作妖?
1. 问题
使用镜像alpine起个容器,使其保持后台运行,正常情况有如下的效果,可以发现容器保持运行状态。
[root@k8s-master helloWorld]# docker run -dit docker.io/alpine /bin/sh
8d39d7579d5e4f1a560aef16ba57ab5cae2506ea9105e21cbc06342a4d4fe17f
[root@k8s-master helloWorld]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d39d7579d5e docker.io/alpine "/bin/sh" 6 seconds ago Up 5 seconds loving_shannon
但是有时候一些容器镜像按照上述方法却达不到预期效果。比如下面这个容器,一创建完就退出了。
[root@k8s-master helloWorld]# docker run -dit helloapp:v1 /bin/sh
8b654e4dc44c9a30544099bf360a4d410cfa81ad9bc14e73c0f384a166bf2420
[root@k8s-master helloWorld]# docker ps --all |grep 8b65
8b654e4dc44c helloapp:v1 "./hello /bin/sh" 14 seconds ago Exited (0) 13 seconds ago fervent_hoover
那么问题出在哪个环节呢?
2. 分析
首先明确一个Docker容器的特性,docker容器运行必须有一个进程, 如果没有进程执行,容器认为空闲,就会自行退出。
那么我们使用docker inspect <id>看看上述两个容器启动时分别执行了什么命令
- 成功后台运行的容器
[root@k8s-master helloWorld]# docker inspect 938 | head
[{"Id": "938cf5ba3fe61e30265e6b44b5493d6d9e60909f77dd4c72da6ee3395e593e55","Created": "2023-07-31T14:41:02.155416227Z","Path": "/bin/sh","Args": [],"State": {"Status": "running","Running": true,"Paused": false,
[root@k8s-master helloWorld]#
可以看到Path值对应的/bin/sh就是容器创建时执行的命令
- 退出的容器
[root@k8s-master helloWorld]# docker inspect 8b654e4dc44c | head
[{"Id": "8b654e4dc44c9a30544099bf360a4d410cfa81ad9bc14e73c0f384a166bf2420","Created": "2023-07-31T16:49:46.95505723Z","Path": "./hello","Args": ["/bin/sh"],"State": {"Status": "exited",
[root@k8s-master helloWorld]#
可以看到Path对应的值是./hello,Args对应的值就是./hello的参数
现在问题基本明朗,就是docker run指定的/bin/sh并不是容器创建时真正执行的命令,而是作为了Path值的参数。当Path值对应的命令执行结束后,容器也就退出了
根本原因:
如果容器镜像制作时,DockerFile中通过ENTRYPOINT指定了容器运行时执行的命令,那么docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 中的COMMAND不生效,直接作为ARG
如果IMAGE后带多个参数,效果也是一样,全部作为了ARG
[root@k8s-master helloWorld]# docker run -dit helloapp:v1 /bin/sh first second
dc0f72e6a8c20915aa31fb325c25e32a0c7230e5596e8747cac3e5c147d47e49[root@k8s-master helloWorld]# docker inspect dc | head -12
[{"Id": "dc0f72e6a8c20915aa31fb325c25e32a0c7230e5596e8747cac3e5c147d47e49","Created": "2023-07-31T17:37:09.251912669Z","Path": "./hello","Args": ["/bin/sh","first","second"],"State": {"Status": "exited",
3. 解决方法
通过--entrypoint参数指定容器创建时执行的命令,覆盖DockerFile中指定的ENTRYPOINT
例如:
[root@k8s-master helloWorld]# docker run -dit --entrypoint /bin/sh helloapp:v1
f00a30b58cf15246ecec2e9089a96a1ebfe57110313f3e45e7b1cd6b12d04536
[root@k8s-master helloWorld]#
[root@k8s-master helloWorld]# docker inspect f0 | head
[{"Id": "f00a30b58cf15246ecec2e9089a96a1ebfe57110313f3e45e7b1cd6b12d04536","Created": "2023-07-31T17:42:52.001675371Z","Path": "/bin/sh","Args": [],"State": {"Status": "running","Running": true,"Paused": false,
[root@k8s-master helloWorld]#
补充:
如果通过指定--entrypoint还是不行,建议docker logs <id>检查下报错。如下面这个,就属于一些常见错误(指定的ARG不是–entrypoint对应的命令能执行的)
[root@k8s-master helloWorld]# docker run -dit --entrypoint /bin/sh helloapp:v1 today
edf83a787563a541cf53a0c0cf569307cc9f7f22e440ca0fb49980d23f181d11
[root@k8s-master helloWorld]#
[root@k8s-master helloWorld]# docker inspect edf | head -12
[{"Id": "edf83a787563a541cf53a0c0cf569307cc9f7f22e440ca0fb49980d23f181d11","Created": "2023-07-31T17:47:21.330346122Z","Path": "/bin/sh","Args": ["today"],"State": {"Status": "exited","Running": false,"Paused": false,
[root@k8s-master helloWorld]# docker logs edf
/bin/sh: can't open 'today': No such file or directory
[root@k8s-master helloWorld]#
相关文章:
【云计算 | Docker】Docker容器后台运行不了?entrypoint在作妖?
1. 问题 使用镜像alpine起个容器,使其保持后台运行,正常情况有如下的效果,可以发现容器保持运行状态。 [rootk8s-master helloWorld]# docker run -dit docker.io/alpine /bin/sh 8d39d7579d5e4f1a560aef16ba57ab5cae2506ea9105e21cbc0634…...
DAY02_Spring第三方资源配置管理Spring容器Spring注解开发Spring整合Mybatis和Junit
目录 一 第三方资源配置管理1 管理DataSource连接池对象问题导入1.1 管理Druid连接池1.2 管理c3p0连接池 2 加载properties属性文件问题导入2.1 基本用法2.2 配置不加载系统属性2.3 加载properties文件写法 二 Spring容器1 Spring核心容器介绍问题导入1.1 创建容器1.2 获取bean…...
烘焙小程序蛋糕店烘焙店源码点心店小程序源码
本系统开发使用JAVA技术栈开发 使用uniapp技术栈 支持微信小程序 ,对接打印机,对接第三方同城跑腿平台 用户端使用:uniapp 管理端使用:vueelementui 后台服务使用:springbootjpa...
HarmonyOS 开发基础(五)对用户名做点啥
一、实现用户名检验 条件渲染 、生命周期 1.规定用户名长度 2.限定使用的数字及字母(涉及正则表达) // 导出方式直接从文件夹 import MyInput from "../common/commons/myInput" Entry Component /* 组件可以基于struct实现,组件…...
【前端】搭建Vue3框架
目录 一、搭建准备二、node.js安装1、下载并安装2、配置默认安装目录和缓存日志目录①、创建默认安装目录和缓存日志目录(我的node.js目录在D盘,所以直接在node.js文件夹下创建)②、执行命令,配置默认安装目录和缓存日志目录到刚才…...
Opencv-C++笔记 (15) : 像素重映射 与 图像扭曲
文章目录 一、重映射简介二、图像扭曲 一、重映射简介 重映射,就是把一幅图像中某位置的像素放置到另一图像指定位置的过程。即: 在重映射过程中,图像的大小也可以同时发生改变。此时像素与像素之间的关系就不是一一对应关系,因…...
【Java】UWB高精度工业人员安全定位系统源码
基于VueSpring boot前后端分离架构开发的一套UWB技术高精度定位系统源码。 UWB高精度人员定位系统提供实时定位、电子围栏、轨迹回放等基础功能以及各种拓展功能,用户可根据实际需要任意选择搭配拓展功能。该系统简易部署,方便使用,实时响应。UWB高精度定…...
文本NLP噪音预处理(加拼写检查)
最近总结修改了下预处理方法,记录下 首先download需要的依赖 pip install pyenchantpip install nltk pyenchant 是用来检测拼写正确的,如果你的文本里面可能包含非正确拼写的单词,那就忽略它,nltk用来做分词的。 python -m nlt…...
[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)]
目录 11、自由风格的CI操作(最终)Jenkins容器化实现方案修改 docker.sock 权限修改 Jenkins 启动命令后重启 Jenkins构建镜像推送到Harbor修改 daemon.json 文件Jenkins 删除构建后操作Jenkins 添加 shell 命令重新构建 Jenkins通知目标服务器拉取镜像目…...
纯JS+Vue实现一个仪表盘
在使用canvas的时候发现数值变化,每次都要重新渲染,值都从0开始,这和我的需求冲突。 1. 先绘制基本的圆环背景,利用border-color和border-radius将正方形变成基本的圆环。 <div class"circle"><div class&qu…...
标定(内参、外参)
在计算机视觉中,特别是在相机标定和立体视觉领域,内参(intrinsic parameters)和外参(extrinsic parameters)是非常重要的概念。它们与相机的几何属性和姿态有关。 内参(Intrinsic Parameters&am…...
基于ffmpeg与SDL的视频播放库
由于工作需要,自己封装的基于ffmpeg的视频编解码库,显示采用了SDL库。可以播放本地文件或网络流,支持多端口播放,支持文字叠加,截图、视频录制等等。 头文件代码: #pragma once #ifdef __DLLEXPORT #defin…...
基于二进制草蝉优化算法选择特征并使用 KNN 进行训练(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 基于二进制草蝉优化算法选择特征并使用KNN(K-Nearest Neighbors,K最近邻算法)进行训练是一种…...
14-4_Qt 5.9 C++开发指南_QUdpSocket实现 UDP 通信_UDP组播
文章目录 1. UDP组播的特性2. UDP 组播实例程序的功能3. 组播功能的程序实现4. 源码4.1 可视化UI设计4.2 mainwindow.h4.3 mainwindow.cpp 1. UDP组播的特性 下图简单表示了组播的原理。UDP 组播是主机之间“一对一组”的通信模式,当多个客户端加入由一个组播地址定…...
ai图片合成软件帮你创造个性绚丽
嘿!悄悄告诉你一个小秘密,现在有一款超酷的软件,它能让你的图片变得活灵活现,就像跳出了屏幕一样!没错,这就是ai图片制作软件!想象一下,你拍摄了一张美丽的风景照片,但总…...
git 版本回退
git 没有push之前,可以用git reset --mixed回退,就是把add 的内容和commit的内容都撤销 在push之后,你只有2种操作 1.git reset 退回到你想要的那个版本 有配置选项 如果是soft就是当前版本删掉,之前改的代码保留,ha…...
使用Jackson自定义序列化操作(Jackson – Custom Serializer)
目录 Standard Serialization of an Object GraphCustom Serializer on the ObjectMapperCustom Serializer on the Class Standard Serialization of an Object Graph Data NoArgsConstructor AllArgsConstructor public class Item {public int id;public String itemName;p…...
Python-元组
元组(Tuples)详解 在Python中,元组(Tuples)是一种有序的数据类型,它可以包含任意类型的元素,包括数字、字符串、列表等。与列表相似,元组也是用来存储一组数据,但与列表…...
快速转换PDF文件: Python和PyMuPDF教程
解决问题 有时候将文档上传Claude2做分析,有大小限制,所以需要切割pdf文档为几个小点的文档,故才有了本文章。 如何用Python和PyMuPDF制作你想要大小的PDF? PDF是一种广泛使用的文件格式,可以在任何设备上查看和打印…...
规划模型Matlab代码
文章目录 数学规划定义一般形式分类 1.线性规划(linear programming)2.非线性规划(nonlinear programming)3. 整数规划(integer programming)4. 0-1规划(0-1 programming)5. 最大最小化模型6. 多目标规划模型7.敏感性分析(对权重)[例题] 数学规划定义 数…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
