docker容器不自动退出结束运行

 2023-12-24  阅读 2  评论 0

摘要:本文主要简单介绍与前置进程的关系,以及如何编写 file/docker-compose.yml 优雅的让容器可以常驻运行。 docker容器的生命周期是同容器中的前置进程相关在一起的,这也是我们平时可能会遇到一些容器只是运行几秒便自动结束的原因:因为容器中没有一个常驻的前置进程,前置进

docker容器不自动退出结束运行

本文主要简单介绍与前置进程的关系,以及如何编写 file/docker-compose.yml 优雅的让容器可以常驻运行。

docker容器的生命周期是同容器中的前置进程相关在一起的,这也是我们平时可能会遇到一些容器只是运行几秒便自动结束的原因:因为容器中没有一个常驻的前置进程,前置进程运行结束后,容器便自动退出了。

比如 docker hello-world

# 一闪而过 输出一堆东西  docker run --name hello-world hello-world  # 可以看到 hello-world 容器已经退出了  docker ps -a  

那怎样可以让容器不自动退出呢?如果我们想登入一个纯净的容器 alpine/centos/ubuntu 之类的,在其基础上安装一些服务组件,然后在 commit 成自己的镜像。

看网上有不少方法是创建容器时执行一个 while(true) 的死循环(当然,sleep 一下)或者用 tail -f /dev/null 一类的,反正就是以开启一个可以常驻的前置进程为目的。其实我们可以更优雅的使用 docker 容器的 interactive 和 tty 参数来将 sh/bash (*nix 系统必有)命令作为前置命令开启,这样容器就不会自动退出了。

例如使用 alpine 镜像做为基础镜像,创建一个 alpine 系统小容器,让其可以常驻运行,以便我们登录交互执行某些命令。

# 使用 alpine 系统镜像创建容器  # -i interactive=true 开启 stdin  # -t tty=true 分配会话终端  # -d 守护模式 不加也可以 不加就直接进入容器中了 需要 ctrl+p+q 切出  # 不能 exit 哟, exit 相当于结束 sh 会话了 容器会退出的  docker run -it -d --name alpine alpine sh  # alpine 肯定在运行  docker ps  # 登入容器  docker exec -it alpine sh  # apline 使用的 apk 作为包管理  # 安装个小火车  # 后续可以使用 docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl 生成新的镜像  apk add sl  # 退出容器 注:-d 启动的才可以,如果没有 -d 启动直接进入的 sh终端 则不能退出,否则容器也会退出  exit

提交容器变更生成新的镜像

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl  docker images  # 有账号的话发布到 docker hub 上去  docker push big_cat/alpine_sl
# 后续停止/启动容器时就不需要在指定 -it 参数了  docker stop alpine  docker start alpine

提交容器变更生成新的镜像

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl  docker images  # 有账号的话发布到 docker hub 上去  docker push big_cat/alpine_sl

以上命令其实是借助 sh/bash 会话终端作为前置进程,使得容器不会自动退出。

如果你觉得在创建容器时如此书写会很粗陋,没关系,我们可以将这些都推给 docker-compose
docker-compose.yml

version: '3'    services:    big_cat_alpine:      container_name: big_cat_alpine      image: alpine      stdin_open: true # -i interactive      tty: true # -t tty      privileged: true      entrypoint: ["sh"] # 执行 sh    

创建容器 & 登入容器

docker-compose up -d big_cat_alpine ./  docker ps  docker exec -it big_cat_alpine sh  

通过 docker-compose 将那两个参数传入进去,编排后启动服务容器。

提示:现在腾讯云新人点击注册然后实名认证后,可以点此一键领取2860元代金券,然后点此进入腾讯云活动页面参加优惠力度非常大的腾讯云3年和5年时长服务器活动,一次性买多年,免得续费贵,这样就可以获得最大的优惠折扣,省钱。

版权声明:xxxxxxxxx;

原文链接:https://lecms.nxtedu.cn/yunzhuji/130909.html

发表评论:

验证码

管理员

  • 内容1196554
  • 积分0
  • 金币0
关于我们
lecms主程序为免费提供使用,使用者不得将本系统应用于任何形式的非法用途,由此产生的一切法律风险,需由使用者自行承担,与本站和开发者无关。一旦使用lecms,表示您即承认您已阅读、理解并同意受此条款的约束,并遵守所有相应法律和法规。
联系方式
电话:
地址:广东省中山市
Email:admin@qq.com
注册登录
注册帐号
登录帐号

Copyright © 2022 LECMS Inc. 保留所有权利。 Powered by LECMS 3.0.3

页面耗时0.0105秒, 内存占用356.7 KB, 访问数据库18次

  • 我要关灯
    我要开灯
  • 客户电话
    lecms

    工作时间:8:00-18:00

    客服电话

    电子邮件

    admin@qq.com

  • 官方微信

    扫码二维码

    获取最新动态

  • 返回顶部