首页 > 其他分享 >【Docker/K8s】启动容器镜像,使其空转不退出

【Docker/K8s】启动容器镜像,使其空转不退出

时间:2023-06-15 15:46:51浏览次数:39  
标签:空转 tty name 启动 util Docker K8s net cn

场景描述

有些时候,我们仅仅想启动一个Docker容器,而不需要它执行预置的命令。比如一个场景是我想检查集群的网络状况,那我需要启动一个容器,然后进入到容器里执行命令来调试。大部分的镜像都带有默认的启动cmd,导致直接docker run启动的话,很快就会因为预置命令执行失败导致退出。

解决方案

1. 第一种思路是覆盖启动命令为执行sh命令,并启动tty。

此时容器就会一直等待tty,从而达到不退出的效果。这种方法比较简洁方便,在我实际使用中大多数采纳这种方式。

Docker

# 大多数镜像, 如果没有设置entrypoint就可以使用这种方式启动
# 小小解释一下, d代表backend,后台执行;t代表tty,启用tty
docker run -dt {{镜像}} sh
# 设置了entrypoint的镜像启动姿势,重写entrypoint
docker run -dt --entrypoint sh nginx:1.23.1-alpine

# 然后就可以进入容器执行命令了
docker exec -it xxx bash

K8s

---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/name: net-util
  name: net-util
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s.kuboard.cn/name: net-util
  template:
    metadata:
      labels:
        k8s.kuboard.cn/name: net-util
    spec:
      containers:
        # 重写启动命令
        - command:
            - sh
          image: 'nginx:1.23.1-alpine'
          imagePullPolicy: Always
          name: net-util
          # 启用tty
          tty: true

2. 第二种思路是覆盖命令为一段死循环脚本

比如以下脚本:

sh -c 'while [ 1 == 1 ]; do echo "循环等待" ; sleep 100 ; done'

Docker

# 待补充, 几乎不用这种方式啊

K8s

---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/name: net-util
  name: net-util
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 3
  selector:
    matchLabels:
      k8s.kuboard.cn/name: net-util
  template:
    metadata:
      labels:
        k8s.kuboard.cn/name: net-util
    spec:
      containers:
        # 重写启动命令为死循环
        - command:
            - sh
            - '-c'
            - 'while [ 1 == 1 ]; do echo "循环等待" ; sleep 100 ; done'
          image: 'nginx:1.23.1-alpine'
          name: net-util

标签:空转,tty,name,启动,util,Docker,K8s,net,cn
From: https://www.cnblogs.com/xiaojiluben/p/17483051.html

相关文章

  • docker 安装 mysql5
    version:'3'services:mysql57:#容器名(以后的控制都通过这个)container_name:mysql57#重启策略restart:alwaysimage:mysql:5.7ports:-"3307:3306"volumes:#挂载配置文件#-./mysql/db/:/docker-en......
  • 云原生之使用Docker部署ONLYOFFICE Document Server在线办公工具
    (云原生之使用Docker部署ONLYOFFICEDocumentServer在线办公工具)一、DocumentServer介绍ONLYOFFICEDocumentServer是一个在线办公套件,包括文本、电子表格和演示文稿的查看器和编辑器,完全兼容OfficeOpenXML格式:.docx、.xlsx、.pptx,并支持实时协作编辑。二、检查系统......
  • docker日常管理
      1.删除镜像dockerimagesdockerrmibf756fb1ae65##镜像id 2.停掉docker容器dockerps-adockerstopf8397131982c 3.删除容器dockerps-adockerrm1a18447e378b或者是直接找出后删除dockerrm-f`dockerps-a-q` 4.docker重启某个镜像[root@localhost~]......
  • docker 配置
    dockerdesktop配置国内镜像仓库{“registry-mirrors”:[“https://registry.docker-cn.com”,“http://hub-mirror.c.163.com”,“https://docker.mirrors.ustc.edu.cn”],“insecure-registries”:[],“debug”:false,“experimental”:false,“features”:{“buildkit”:......
  • DockerFile
    DockerFileDockerFile是用于构建docker镜像的文件构建步骤:编写一个dockerfile文件dockerbuild将文件构建成为一个镜像dockerrun运行镜像dockerpush发布镜像基础知识:每个指令都是大写字母组成指令从上到下顺序执行每一个指令都会创建一个新的镜像层,并提交常用指令ADD和COPY......
  • docker常用命令
    docker常用命令镜像命令dockerimages #查看本地主机的镜像-a #列出本地所有镜像-q #只显示镜像iddockersearch #搜索对应的镜像eg:dockersearchmysql-f #可以对镜像进行筛选eg:dockersearchmysql-f=STARS=4338--limit#对镜像个数做限......
  • k8s集群根据进程PID获取Pod名称
    简单说明在实际的应用场景中,我们如果看到某个进程资源或服务异常,需要根据这个进程排查到底是哪个服务的Pod,这里我们介绍一种根据PID快速寻找Pod名称的方法。实际操作查看进程PID这里我们以GPU任务为例说明,可以看到占用显卡的任务PID为8241[root@centos~]#nvidia-smiThuJu......
  • docker-compose构建kratos微服务项目运行失败,提示:runtime/cgo: pthread_create failed
    这个问题网上解决方案较少,我们这边问题定位是docker-compose.yaml配置问题在配置文件中新增配置如下:privileged:true设置容器的权限为root 最后解决......
  • k8s pod 状态异常状态分析和处理方法
    pod状态一般分为以下几种:1、terminating2、pending3、containercreating或waiting4、CrashloopBackoff5、imagePullBackoff6、imageinspectError7、unknown8、Error1、一般处于imageinspectError通常指的是镜像文件损坏了,可以尝试删除损坏的镜像重新拉取。2、Error状......
  • docker安装与使用教程
    https://mp.weixin.qq.com/s?__biz=MjM5NTY1MjY0MQ==&mid=2650860524&idx=3&sn=02dfc31d637f70b066a6ef9842beeac5&chksm=bd017ea28a76f7b466773e68f7dab26e65ffae2918c28aa1d87c84acfc54460a7b82aa57279f&scene=27  官方的一键安装方式:curl -fsSL https://ge......