关于docker容器内要启动两个进程时Dockerfile的编写

docker容器内要启动两个进程时Dockerfile的实现代码 近期想做一个cron定时任务的docker,在Dockerfile中做如下定义 FROM library/alpine:latest RUN apk --update add rsync openssh bash VOLUME [/data] ADD start.sh / CMD [/bin/bash,/start.sh] 在start.sh中用crontab 加载定时任务run.cron,然后启动crond: /usr/bin/crontab /run.cron /usr/sbin/crond docker build Dockerfile后,采用docker run –n 立即下载

近期想做一个cron定时任务的docker,在Dockerfile中做如下定义

FROM library/alpine:latest
RUN apk --update add rsync openssh bash
VOLUME ["/data"]
ADD start.sh /
CMD ["/bin/bash","/start.sh"]

在start.sh中用crontab 加载定时任务run.cron,然后启动crond:

/usr/bin/crontab /run.cron

/usr/sbin/crond

docker build Dockerfile后,采用docker run –name xxx -d 运行容器,发现start.sh执行后容器就退出了,根本无法启动定时任务,网上各种办法有说用nohup,有死循环,还有说用信号,发现都不靠谱。分析了一下docker的机制,一个docker容器同时只能管理一个进程,这个进程退出后,容器也就退出了。这并不意味着一个容器里只能同时运行一个进程(那样太浪费了),只是最后一个运行的进程不能退出。这个案例在容器启动运行start.sh,crond的缺省设置是后台运行,这样导致start.sh运行结束,容器跟着start.sh退出而退出。因此,在start.sh中,crond 应强制采用前台运行:crond -f。这样start.sh就不会退出, docker run -d 运行时就可以保持容器后台运行。

start.sh总结总结:

(1)容器中运行多个守护进程时,前面的进程要用后台方式运行(或添加 &),否则后面的服务无法启动

(2)容器中最后一个守护进程一定要用前台方式运行,否则start.sh退出,容器退出,所有的服务就白启动了

FROM ubuntu:latest

RUN mkdir -p "/usr/src/pdas" \
    mkdir -p "/usr/src/pdas/reload"

COPY bin.tar /usr/src/pdas
COPY config.tar /usr/src/pdas
COPY lib.tar /usr/src/pdas

WORKDIR /usr/src/pdas
RUN tar -xvf lib.tar && \
    tar -xvf bin.tar && \
    tar -xvf config.tar

ENV LD_LIBRARY_PATH /usr/src/pdas/lib/libxml/lib:/usr/src/pdas/lib/curl/lib:$LD_LIBRARY_PATH

WORKDIR /usr/src/pdas/bin
RUN chmod +x start.sh && \
    chmod +x f_recv && \
    chmod +x f_send

VOLUME /behb/diqu
VOLUME /var/log/pdas

ENTRYPOINT ./start.sh

其中 ./start.sh脚本如下

#!/bin/bash
./f_recv &
./f_send

以上是docker镜像启动脚本的一点心得

docker容器运行后退出(怎么才能一直运行) 主要介绍了docker容器运行后退出(怎么才能一直运行),本文详细的介绍了解决方法,非常具有实用价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载

相关推荐

从零开始掌握Python机器学习:七步教程 基础篇

前言 「开始」往往是最难的,尤其是当选择太多的时候,一个人往往很难下定决定做出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,而且这个过程中仅需要使用免费的材料和资源即可。 第一步:基本 Python 技能 如果我们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是至关重要的。 首先,你需要安装 Python。因为我们后...

hcgx2018的博客 1613

dockerfile的面试题

编写 Dockerfile ,构建⼀个Docker镜像(不能包含 MySQL 服务端程序),完成以下需求 镜像中包含⼀个 shell 脚本,容器启动后每隔 30s 收集 MySQL 数据库当前的连接数,将数据同时输出⾄ /data/log ⽂件(⽇志可以持久化保存)及标准输出中 数据库IP、端⼝、⽤户及密码可以在容器启动时通过 -e 指定环境变量来修改 要求容器启动后可以使⽤ docker logs container_name 和 docker exec -i -container_name tail -

xiaolong1155的博客 1048

Win11下Python脚本不执行?5分钟搞定PATH环境变量配置(VSCode终端实测)

本文针对Win11系统下VSCode终端中Python脚本执行无响应的问题,提供了详细的诊断与解决方案。核心在于正确配置PATH环境变量,通过图形化界面调整Python路径优先级,并分享了VSCode终端环境变量的刷新技巧,帮助开发者在5分钟内快速解决环境配置难题。

weixin_28358083的博客 384

docker entrypoint 为crond导致golang的进程出现好多僵尸进程

考虑到最近docker的entrypoint修改成了,crond,并且根据最近出故障的时间点判断基本是这个问题了。也着手优化可疑的代码行,但是心里还是没底,总感觉不是go程序本身出问题。一次偶然的机会发现了系统有大量的僵死进程,并且kill不了,后来发现僵死进程的父进程id是docker守护进程。golang写的cron获取的标准错误日志是进程fork出错,memory也出错。然后就是修改这个entrypoint,测试验证之后,问题彻底修复。最近的服务器出现每到周末就出问题,现象是ssh不能登录。

ZHUBOYAN123的专栏 303

Applied Energy期刊小白论文投稿模板-流程经验分享

Applied Energy期刊小白论文投稿模板-流程经验分享,Elsevier期刊(爱思唯尔)投稿流程

zzu_Flyer的博客 4万+

Simulink中扩张状态观测器ESO搭建与参数整定实战

扩张状态观测器(ESO)是自抗扰控制(ADRC)的核心,用于估计系统总扰动并实时补偿。其原理是将扰动扩张为状态变量,通过观测器带宽配置增益,实现扰动估计。在Simulink中搭建ESO可直观验证连续与离散域性能,解决参数整定与噪声折中问题。典型应用包括运动控制、电力电子和机器人驱动。本文基于MATLAB/Simulink,详细讲解线性ESO的模型结构、参数计算、离散化实现及常见问题排查,帮助读者从零搭建并调试ESO仿真。

weixin_34116482的博客 224

如何使docker容器不退出

运行容器时可以指定其执行什么命令,但是这个命令执行完了,这个容器就自动终止了 所以这个命令执行不会完成,那么容器就不会终止 1. docker run时可以指定/bin/sh -c "while true; do sleep 1; done” 2.运行容器执行的脚本最后可以增加 #!/bin/bash while [ 1 = 1 ] do sleep 1; done

sici1985的专栏 6194

【科研导航】【计算机视觉与图像处理】从顶刊到潜力股:跨学科(电子/电气/信息)SCI期刊投稿全景图

本文全面解析了计算机视觉与图像处理领域的SCI期刊投稿策略,涵盖从顶刊到潜力股的各类期刊特点。重点介绍了IEEE Transactions系列、Elsevier旗舰期刊以及二区优质期刊的审稿偏好和投稿技巧,特别适合电子/电气/信息交叉学科的研究者。文章还提供了三区、四区期刊的实用投稿建议,帮助科研新手快速找到适合的发表平台。

weixin_30897233的博客 83

dockerfile执行shell脚本_docker容器内要启动两个进程时Dockerfile的实现代码

近期想做一个cron定时任务的docker,在Dockerfile中做如下定义FROM library/alpine:latestRUN apk --update add rsync openssh bashVOLUME ["/data"]ADD start.sh /CMD ["/bin/bash","/start.sh"]在start.sh中用crontab 加载定时任务run.cron,然后启...

weixin_29238147的博客 3118

YOLO26跨时代升级!YOLO26 MLCA注意力机制解读

摘要: 本文提出了一种基于多级上下文聚合(MLCA)注意力机制的改进卷积神经网络。MLCA模块通过局部和全局注意力机制动态调整特征图权重,结合了ECA注意力与自适应池化,显著提升特征表达能力。实验表明,添加MLCA后模型mAP提升12.11,准确率提高5.43。文中详细解析了MLCA1模块的工作原理,包括局部/全局池化、卷积操作和注意力加权机制,并介绍了集成MLCA的Bottleneck_MLCA模块。该机制通过多层次特征融合,在保持计算效率的同时增强模型对关键特征的敏感性。最后提供了YOLOv26-MLC

m0_71589036的博客 283

Docker容器启动时的第一个进程的设置总结

实际生产中,Docker容器创建(或启动)时,默认即启动必要的服务进程,这种用法非常常见。容器中默认即启动的服务往往作为容器的第一个进程启动。如docker run命令创建Tomcat容器时即启动容器中的Tomcat服务。Docker提供了有多种方式实现该特性。 1.执行一个带参数的命令 创建容器时,如果希望默认即执行一个带参数的命令mycommand myparam,利用Dockerfile...

成长的足迹 6050

7.19华为OD机试真题 新系统 - 物流仓储多维度成本利润综合查询系统 (Java/Py/C/C++/Js/Go)

7.19华为OD机试真题 新系统 - 物流仓储多维度成本利润综合查询系统 (Java/Py/C/C++/Js/Go)

算法大师! 618

docker mysql开机自启动_如何在运行docker容器时自动启动服务?

11 个答案:答案 0 :(得分:181)首先,Dockerfile中存在问题RUN service mysql restart && /tmp/setup.shDocker镜像不保存正在运行的进程。因此,您的RUN命令仅在docker build阶段执行,并在构建完成后停止。相反,您需要在使用CMD或ENTRYPOINT命令启动容器时指定命令:CMD mysql start其次,...

weixin_32567865的博客 642

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

通过Dockerfile构建nginx镜像,启动失败的原因

通过Dockerfile构建nginx的一些思考。 刚开始接触docker,在利用dockerfile通过centos7的镜像构建nginx镜像时,最后的启动命令上面遇到很多启动失败。然后想了4种启动方法,只有1种能正常运行。当时是想不明白为什么,继续深入学习后发现了其中的一些知识没学习到。作一下记录。 构建nginx的Dockerfile上部分的内容为: FROM centos:centos7 MAINTAINER zyy 123@qq.com RUN yum -y install gcc gcc-c++

zyy247796143的博客 5867

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

解决spring boot应用以docker容器方式启动后,进程ID是1而导致的jstack和jmap等命令不可用的问题

TOC] 目的 解决spring boot应用以docker容器方式启动后,进程ID是1而导致的jstack和jmap等命令不可用的现象 默认将spring boot工程打包成镜像的方式 当我们把spring boot打包成一个可执行jar 编写Dockerfile 将jarcopy到容器中,在cmd 中执行java -jar ***.jar 启动,Dockerfile文件如下 #基础镜像基于openjdk,利用alpine FROM openjdk:8u212-jdk-alpine #所属团队

西西工作室 2917

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

使用Dockerfile定制镜像并使用的详细步骤

使用Dockerfile定制镜像并使用的详细步骤

每天进步一点点 550

docker中使用systemctl启动服务报错的解决办法

方法1:在启动容器的时候,加上/usr/sbin/init [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS POR

shenzhen_zsw的专栏 6320

Docker中启动Docker问题

尝试在Docker 的Centos容器中继续起个dokcer来测试,但是在容器中运行任何docker命令,如docker ps,都会报错

程序员面试精选【codeoffer】 1248

docker里面设置ssh服务与supervisor随容器启动

1. 新建dockerfile文件夹,有两个文件如下 docker_file/ ├── Dockerfile └── start.sh 2. start.sh中写需要启动运行的shell脚本 #!/bin/bash service ssh start supervisord -c /etc/supervisor/supervisord.conf /bin/bash 3. Dockerfile中把shell copy进去 #!/bin/bash service ssh start supervisord

HELLOWORLD2424的博客 734

基于dockerfile构建nginx

思路:使用shell脚本(nginx_install.sh)安装,注意最终shell脚本nginx的压缩包及dockerfile文件要放一起。使用前台方式永久运行:/usr/local/nginx/sbin/nginx -g "daemon off;-rwxr-xr-x. 1 root root 3825912 12月 20 17:20 nginx。1,#编辑下面的nginx_install.sh脚本(如下)写入文件中。3,构建镜像,走到最后,看到成功!#启动页面访问看到成功!#杀掉原来的nginx。

q2020587004的博客 2002

docker stop和docker start

docker stop docker stop其实就是向容器内的主进程发送退出信号(SIGTERM),使得容器停止运行,如果发送SIGTERM之后一段时间还没有退出,则会发送SIGKILL强行中止。 docker start docker start就是运行dockerfile中由entrypoint和cmd说明的命令,启动容器。 ...

Focus 668

Docker学习总结

Docker相关概念整理总结

weixin_40949241的博客 415

安防视频上云服务云平台EasyCVR部署之docker部署步骤参考说明

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。 近期TSINGSEE青犀视频研发团队正在对云边端视频智能分析平台EasyCVR进行进一步的部署和测试,其中就测试了EasyCVR使用docker部署,本文就和大家分享一下部署的步骤。 一、EasyCVR Dockerfile 制作 1、选择基础镜像,这里选择最小的centos,FROM ansible/centos7-a

TSINGSEE青犀视频官方技术博客 1190

linux 配置服务开机启动

可以通过创建一个自定义的 Dockerfile,并在其中使用CMD或ENTRYPOINT指令来指定启动时运行的命令。编辑 /etc/rc.local 文件,并在exit 0语句之前添加你的应用程序路径。在运行docker run命令时,可以使用-d参数后跟启动命令来确保进程在后台运行。systemctl enable myapp.service #配置开启启动。ExecStart=/path/to/myapp #启动命令。WantedBy=multi-user.target #依赖。

weixin_41565755的博客 656

Docker环境下部署C++程序

作为一名C++程序员,在实际项目中,经常需要将我们的程序作成镜像,然后在docker中运行。那么我们将如何做那?下面以一个例子作为讲解: 操作步骤 1.将项目的执行文件、依赖的库、相关配置放在同一文件夹下,如下图所示: bin目录:依赖的库和可执行程序 json目录:配置文件 platformconfig目录:框架依赖的配置文件 2.编写dockerfile文件,放在项目文件夹下,如上图所示 dockerfile文件如下: 3.查看本地所有的镜像 docker images 其中,192.168.3.

温暖不了你的心的博客 6263
上一篇: linux c语言获取文件的属性
下一篇: c语言返回链表(malloc分配的字符串)
behb-zzw
博客等级 码龄15年 7粉丝 39原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值