docker容器保持运行不退出

nsenter工具进入docker容器
概述
对于运行在后台的docker容器,我们经常需要做的事情是进入到容器中,docker为我们提供了docker exec 、docker attach 命令,并且还提供了nsenter工具,外部工具供我们使用。docker attach存在的问题是:当多个窗口同时attach到同一个容器时,所有的窗口都会同步的显示,假如其中的一个窗口发生阻塞时,其它的窗口也会阻塞,docker attach命令可以说是最不方便的进入后台docker容器的方法。docker exec命令是在docker 1.3之后增加的一个比docker attach命令更加方便的命令。和docker exec差不多方便的命令是nsenter工具。

nsenter安装
$ cd /tmp;
$ curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
$ ./configure --without-ncurses
$ make nsenter && sudo cp nsenter /usr/local/bin

nsenter使用
在使用nsenter命令之前需要获取到docker容器的进程,然后再使用nsenter工具进去到docker容器中,具体的使用方法如下:

$ docker inspect -f {{.State.Pid}} 容器名或者容器id #每一个容器都有.State.Pid,所以这个命令除了容器的id需要我们根据docker ps -a去查找,其他的全部为固定的格式
$ nsenter --target 上面查到的进程id --mount --uts --ipc --net --pid #输入该命令便进入到容器中

解释nsenter指令中进程id之后的参数的含义:
* –mount参数是进去到mount namespace中
* –uts参数是进入到uts namespace中
* –ipc参数是进入到System V IPC namaspace中
* –net参数是进入到network namespace中
* –pid参数是进入到pid namespace中
* –user参数是进入到user namespace中

在Linux中,最爱简单的查看指定命令参数含义的办法是在终端中输入:

$ nsenter --help #会回显所有与该命令有关的参数
$ man nsenter #能查到更加详细的使用示例和参数说明

现象
启动docker容器
docker run –name [CONTAINER_NAME] [CONTAINER_ID]
查看容器运行状态
docker ps -a
发现刚刚启动的mydocker容器已经退出

原因
docker容器的主线程(dockfile中CMD执行的命令)结束,容器会退出

办法
可以使用交互式启动

docker run -i [CONTAINER_NAME or CONTAINER_ID]

上面的不太友好,建议使用后台模式和tty选项

docker run -dit [CONTAINER_NAME or CONTAINER_ID]

查看容器状态

docker ps -a

docker调出后台容器

docker attach [CONTAINER_NAME or CONTAINER_ID]

TIPs:退出时,使用[ctrl + D],这样会结束docker当前线程,容器结束,可以使用[ctrl + P][ctrl + Q]退出而不终止容器运行

如下命令,会在指定容器中执行指定命令,[ctrl+D]退出后不会终止容器运行

docker exec -it [CONTAINER_NAME or CONTAINER_ID] /bin/bash

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果Docker容器运行后立即退出,有几种可能的原因和解决方法。 一种常见的原因是容器启动后没有应用在后台运行进程,并且没有任何终端连接到容器中。在这种情况下,容器任务完成后会立即退出。为了使容器继续运行,可以使用一个无限循环或者一个守护进程在容器中。可以通过在Dockerfile或者docker run命令中添加合适的命令来实现。比如,可以在Dockerfile中使用CMD或者ENTRYPOINT指令来指定一个脚本,脚本的最后包含一个无限循环来阻止容器退出。 另一种可能的原因是容器启动后遇到错误而退出。这可能是由于配置问题、依赖项缺失等原因导致的。要解决这个问题,可以通过查看容器的日志输出来分析错误原因。可以使用docker logs命令来查看容器的日志输出,并查找有关错误的提示。一旦找到错误原因,可以尝试通过更新配置文件、安装依赖项等方式来解决问题。 最后,容器可能会因为资源限制或者配置不当而被操作系统或者Docker守护程序终止。这可能是由于内存不足、CPU使用过高、磁盘空间不足等原因导致的。要解决这个问题,可以尝试增加容器的资源限制,比如分配更多的内存、增加CPU配额等。另外,还可以检查Docker守护程序的配置,确保它的资源限制设置正确。 综上所述,要使Docker容器持续运行,我们需要确保容器中有一个持续运行的进程,以及适当的配置和资源限制。通过分析容器的日志输出,检查配置文件和资源限制,可以找到并解决导致容器退出的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值