gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 33 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章解决docker run 或者 docker restart 启动镜像就自动退出由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

?
1
2
3
4
5
6
7
[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中报错代码段如下 。

?
1
2
3
4
5
6
7
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 启动镜像就自动退出就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/chenwen202/article/details/108117916 。

最后此篇关于解决docker run 或者 docker restart 启动镜像就自动退出的文章就讲到这里了,如果你想了解更多关于解决docker run 或者 docker restart 启动镜像就自动退出的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com