Docker容器内服务自启动解决方案
背景
在很多场景下,我们需要拉取或者是使用的别人的容器,但是有些容器内部的服务并不能自启动,比如Apache服务、mysql服务等等,对于数量较少的容器来讲,我们可以进入容器中使用命令将服务进行启动,但是如果是在一些像是CTF竞赛场景下,需要启动几十个或者是上百个docker容器,这个时候,如果容器内服务不能自启动,对于赛事运维运维人员来讲便是一场噩梦。那么怎么解决这个问题呢?
解决方案
我们来想一下,要解决服务不能自启这个问题,其实跟我们手动起执行命令启动容器原理差不多,只不过这个时候就不能我们手动起了,要给容器或者是镜像写一个shell,让它在容器启动的时候自动执行命令去启动服务。
实施(案例:以openresty为例)
1、先将容器保存为镜像
# 查看容器id及其状态
docker ps -a
# 若容器状态为running,需停止容器
docker stop <容器id> ---- docker stop 6ave5f37f835
# 将容器打包成镜像
docker commit <容器id> <镜像名>:<tag> ---- docker commit 6ave5f37f835 lamp:v1
# 查看保存下来的镜像
docker images
2、编写服务启动shell脚本(run.sh)
#!/bin/bash
/app/openresty/nginx/sbin/nginx
3、编写Dockerfile文件
FROM openresty:v1.21.4.1 # 在第一步保存下来的镜像
WORKDIR /app/openresty
ENTRYPOINT /app/openresty/startOpenresty.sh && tail -f /dev/null
MAINTAINER huangmanyao
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
4、重新构建openresty镜像
docker build -t openresty:latest .
5、使用重新构建的镜像启动容器
docker run -itd -p 8888:80 -p 2222:22 --restart=always openresty:latest
6、查看openresty端口,正常情况下,服务是已经自启动了
Docker容器内服务自启动解决方案的更多相关文章
- docker 容器内服务自启动
centos6/7 有区别先说6 centos6: 方式一:rc.local + 容器内的启动脚本 1.chkconfig docker on #docker开机自启动2.[root@master y ...
- docker容器SSH服务自启动
使用ubuntu容器,会在容器内安装ssh服务,但是会发现当容器重启后,如何实现ssh服务自动重启呢?可以使用Dockerfile参看此处 ,本文介绍一种在docker容器中进行配置的方法 安装ssh ...
- Docker容器内服务自启
创建容器时需要配置--privileged和容器启动后执行的命令为/sbin/init/. docker run -d -it --name example -p 3308:3306 -p 2080: ...
- Docker容器内不能联网的6种解决方案
Docker容器内不能联网的6种解决方案 注:下面的方法是在容器内能ping通公网IP的解决方案,如果连公网IP都ping不通,那主机可能也上不了网(尝试ping 8.8.8.8) 1.使用–net: ...
- Docker容器内中文乱码
Docker容器内中文乱码 一.通过Dockerfile解决中文乱码问题 方式二: 二.临时解决 方式二: 三.修改jre/lib/fonts下的字体 CSDN:黑猫_:Dockerfile 创建容器 ...
- 记录一次docker容器内修改my.cnf配置文件max_allowed_packet参数的过程
1. 问题背景 在一次新版本功能开发完毕,配合测试的过程中,测试反馈某个XxlJob定时任务一直执行失败,在分析了日志之后,找到了报错的原因: Packet for query is too larg ...
- Flume+Kafka收集Docker容器内分布式日志应用实践
1 背景和问题 随着云计算.PaaS平台的普及,虚拟化.容器化等技术的应用,例如Docker等技术,越来越多的服务会部署在云端.通常,我们需要需要获取日志,来进行监控.分析.预测.统计等工作,但是云端 ...
- Jenkins(Docker容器内)使用宿主机的docker命令
1.Jenkins镜像 Docker容器内的Jenkins使用容器外宿主机的Docker(即DooD,还有另外的情况就是DioD),google一下有几种说法,但是都没试成功(试过一种就是修改宿主机/ ...
- centos:解决docker容器内挂载目录无权限 ls: cannot open directory .: Permission denied
docker运行一个容器后,将主机中当前目录下的文件夹挂载到容器的文件夹后 进入到docker容器内对应的挂载目录中,运行命令ls后提示: ls: cannot open directory .: P ...
- Docker容器内Mysql大小写敏感方案解决
Docker容器内Mysql大小写敏感方案解决 一.(lower_case_table_names)参数说明 二.Docker 部署 MySql 并修改为大小写不敏感 2.1直接在Docker启动的时 ...
随机推荐
- pc 移动端 双端切换-路由判断
该封装主要以分类形式,实现对路由的简易区分.便于项目管理. 创建好项目,勾选路由插件,会自动生成 router文件夹与index.ts . index.ts 初始内容 创建项目 自动生成的router ...
- NSmartProxy:一款.NET开源、跨平台的内网穿透工具
前言 今天大姚给大家分享一款.NET开源.免费(MIT License).跨平台的内网穿透工具,采用.NET Core的全异步模式打造:NSmartProxy. 内网穿透工具介绍 内网穿透工具是一种能 ...
- Docker学习系列3:常用命令之容器命令
本文是Docker学习系列教程中的第三篇.前几篇教程如下: 「图文教程」Windows11下安装Docker Desktop 「填坑」在windows系统下安装Docker Desktop后迁移镜像位 ...
- mysql 死锁原因及解决办法
Mysql 锁类型 一.锁类型介绍: MySQL 有三种锁的级别:页级.表级.行级. 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出 ...
- React函数式组件避免无用渲染的方案
在class组件中可以使用shouldComponentUpdate钩子函数,但是函数式组件中是没有这种钩子函数的,那么在函数式组件中来达到类似的效果呢? 答案是:React.Memo,如以下使用案例 ...
- WiFi基础(三):802.11ac/ax/be 与 WiFi4、WiFi5、WiFi6、WiFi7
liwen01 2024.09.08 前言 经过二十多年的发展,WiFi 在硬件能力.软件和算法.频谱资源.市场需求.电源与能效方面都有了很大的提升.所以我们能看到从最开始只有几 M 速率的 802. ...
- 鸿蒙系统(HarmonyOS)全局弹窗实现
全局弹窗相对于自定义弹窗有以下优点: 封装更彻底,一行代码就能调用 跟组件耦合度低,只需要传入组件的UIContext对象,不需要跟自定义弹窗一样需要在组件内部实例化CustomDialogContr ...
- Servlet—— urlPattern配置
Servlet urlPattern配置 Servlet要想被访问,必须配置其访问路径(urlPattern) 1.一个Servlet可以配置多个 urlPattern 2.ur ...
- codeforces 1931E
题目链接 简介:对一些数字,余念安可以反转一个数字,齐夏将两个数字首尾相连变为一个数字.每个人都采取最优策略. 名单上只剩下一个号码.如果该整数不小于 10的m次方 ,则齐夏获胜.否则余念安就赢了. ...
- MaterialDesignInXamlToolkit 5.0 发布
5.0.0 发布 这是一个重大版本更新,又许多破坏性变化 升级到5.0.0版本,请参考:https://www.cnblogs.com/sesametech-dotnet/p/18028565 变化 ...