【云计算 | 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.敏感性分析(对权重)[例题] 数学规划定义 数…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...

[10-1]I2C通信协议 江协科技学习笔记(17个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...
Java毕业设计:办公自动化系统的设计与实现
JAVA办公自动化系统 一、系统概述 本办公自动化系统基于Java EE平台开发,实现了企业日常办公的数字化管理。系统包含文档管理、流程审批、会议管理、日程安排、通讯录等核心功能模块,采用B/S架构设计,支持多用户协同工作。系统使用Spring B…...
【Flask】:轻量级Python Web框架详解
什么是Flask? Flask是一个用Python编写的轻量级Web应用框架。它被称为"微框架"(microframework),因为它核心简单但可扩展性强,不强制使用特定的项目结构或库。Flask由Armin Ronacher开发,基于Werkzeug WSGI工具包和Jin…...