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 run 或者 docker restart 启动镜像就自动退出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统管理必备知识之利用ssh传
- 下一篇: 面试常碰到++p/p--问题到底结果是什