当前位置: 首页 > 编程笔记 >

解决docker run 或者 docker restart 启动镜像就自动退出

羊舌迪
2023-03-14
本文向大家介绍解决docker run 或者 docker restart 启动镜像就自动退出,包括了解决docker run 或者 docker restart 启动镜像就自动退出的使用技巧和注意事项,需要的朋友参考一下

执行命令:docker run --name centos8 -d centos /bin/bash,通过docker ps查看正在运行中容器,找不到centos8。

通过docker ps -a查看发现,centos8容器已经处于停止状态了

[root@MiWiFi-R4A-srv server]$ docker run --name centos8 -d centos /bin/bash
a770630ca865b3c3346a321a383f302ed22af9281be8482f4f4debc59218d0d1
[root@MiWiFi-R4A-srv server]$ docker ps
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES
[root@MiWiFi-R4A-srv server]$ docker ps -a
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS      PORTS    NAMES
a770630ca865  centos    "/bin/bash"    37 seconds ago  Exited (0) 35 seconds ago      centos8

为什么退出?

这是因为docker后台运行,必须有一个前台进程。docker运行的命令如果不是那些一直挂起的命令(e.g. top,ping),就是会自动退出的。而上面的代码中-d centos就是需要执行的指定的命令。命令如果执行完毕了或者应用终结时,容器会自动停止。

解决方法

以前台进程的形式运行

将运行的程序以前台进程的形式运行,如果容器需要同时启动多个进程,那么也只需要将其中一个挂起到前台即可。

比如上面所说的 centos 容器,只需要将启动指令修改为交互方式启动:

docker run --name centos8 -it centos /bin/bash

又或者是Web容器:

service php5-fpm start && nginx -g "daemon off;"

取巧方式

添加类似于 tail top 这种可以前台运行的程序,持续输出log文件即可。

service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log

再以上面所说的 web 容器为例,可以写成:

service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log

自己写脚本

在启动centos/ubuntu容器时,可以做一个手脚:做一个死循环,持续输出任意,这样容器不会认为没事可做而自杀了。

docker run -d centos /bin/bash -c "while true; do echo hello world; sleep 1; done"

补充知识:docker中启动容器时CMD调用的sh脚本中if命令报未预期的符号 if[[的解决办法

最近通过Dockerfile编写镜像,CMD中调用的是sh脚本(start.sh)进行启动容器,通过docker run启动时,启动不成功,进行docker logs 容器ID,发现报错为:未预期的符号 if [[

我直接在外部linux系统调用执行start.sh是成功的,通过docker exec 进入容器,在容中调用start.sh也未报错,命令中需要启动的程序都成功启动。脚本直接执行没问题,通过docker run却报错,百思不得其解。

start.sh中报错代码段如下

if [[ -e /home/dc/testnn-aaa.zip ]];then
 rm -rf /home/testnn-aaa
 unzip -q -o -d /home testnn-aaa.zip
 echo "unzip zip finished" 
else 
 echo "dc zip not exist"
fi

经过查阅比较,因为我的start.sh在报错语句之前也有if语句,但是没报错,发现两处区别为第一处if使用的是单[],将代码改为[],则成功,修改如下:

if [ -e /home/dc/testnn-aaa.zip ];then

以上这篇解决docker run 或者 docker restart 启动镜像就自动退出就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍详解Docker如何启动一个Centos镜像,包括了详解Docker如何启动一个Centos镜像的使用技巧和注意事项,需要的朋友参考一下 接着上文,我们下载完成一个Centos镜像之后,开始启动 #运行命令 这样就能启动一个一直停留在后台运行的Centos了。如果少了/bin/bash的话,Docker会生成一个Container但是马上就停止了,不会一致运行即使有了-d参数。 然后

  • 如何在启动Spring启动应用程序后自动启动浏览器。是否有任何侦听器方法回调来检查webapp是否已经部署并准备好提供请求,以便在浏览器加载时,用户可以看到索引页并开始与webapp交互?

  • 所以在开始这个问题之前,这里是我对码头工人的理解。 Docker有3个组件 图像 容器 DockerFile 现在,我不想采用的方法,在这里指定创建容器时要执行的步骤。 我想在Linux上安装一些基本的实体,如MongoDb、Redis等,并在它们上运行我的服务器。 于是我就这样开始了: 它返回给我容器的id。 但每次它都在说: 请帮助我做错的地方,这可能是一个新手的问题,但我被困在这里,请不要反

  • 首先在 /etc/init.d 目录下添加 es 脚本(可执行), #!/bin/bash su es -c "/elasticsearch-2.3.5/bin/elasticsearch -d" 2. 查看系统启动级别 [root@slave02 init.d]# runlevel N 5 3. 在 /etc/rc5.d 下建立软链 ln -s S70es /etc/init.d/es

  • 安装Windows服务时,有两个选项可以在Windows启动时自动启动Windows服务。一个是自动,另一个是自动(延迟启动)。详细来说,这两者有什么区别? 例如,如果您使用wixtoolset创建安装程序,ServiceConfig元素具有DelayedAutoStart属性。当服务在启动时启动时,这会对发生的事情产生什么影响? WiX留档:ServiceConfig元素

  • 我有一个运行播放web应用程序的docker映像。在dockerfile中有一个CMD,它启动服务器,并等待您按下Ctrl+D退出。如果我这样做: 它工作正常-启动服务器并等待Ctrl+D。 然而,当我启动容器时,情况并非如此: 如何强制docker start不停止服务器?