背景
在很多场景下,我们需要拉取或者是使用的别人的容器,但是有些容器内部的服务并不能自启动,比如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端口,正常情况下,服务是已经自启动了
标签:容器,服务,解决方案,openresty,自启动,镜像,Docker,docker From: https://www.cnblogs.com/cherylgi/p/17013996.html