看到51cto的一個教程,感覺還不錯 https://edu.51cto.com/sd/bf0f7
1、docker容器啟動后自動停止
自動停止的因素有很多,比如啟動后命令有問題就停止了,這類容器在啟動后是可以看到容器的啟動日志的,比如使用docker logs命令即可
不過還有的容器意外停止是因為當前容器沒有要運行的任務,比如centos鏡像,它默認沒有運行的任務,如果沒有任務就會自動停止,這種不是意外停止,這點要注意
因此需要注意一點就是:在制作dockerfile的時候,要有一個運行在前台的任務,因此那些運行在后台的參數最好是不要加上去,也就是讓程序運行在前台。
2、dockerfile案例演示
FROM centos7.5 WORKDIR /usr/local/src COPY elasticsearch-7.4.0-linux-x86_64.tar.gz ./ RUN tar xf elasticsearch-7.4.0-linux-x86_64.tar.gz \ && mv elasticsearch-7.4.0 /usr/local/elastic7.4 \ && useradd -s /bin/bash -U elastic \ && echo 'elastic soft memlock unlimited' >> /etc/security/limits.conf \ && echo 'elastic hard memlock unlimited' >> /etc/security/limits.conf USER elastic RUN /usr/local/elastic7.4/bin/elasticsearch --daemonize --pidfile /usr/local/elastic7.4/run/elastic7.4.pid
這個腳本的問題就在於,--daemonize這個參數表示程序運行在后台,此時啟動制作出來的容器是不會一直運行的,也就是啟動后就停止了
解決方法就是將--daemonize這個參數去掉,此時鏡像在啟動后直接執行此命令,程序就運行在前台,日志也打印在前台了。
還有一個就是docker run -it --name=centos centos7.5:1.0 /bin/bash這種命令運行時默認執行/bin/bash,這個bash命令會覆蓋dockfile中的CMD指令,這點需要注意。
最后就是容器執行的用戶,可以在docker run 啟動時指定--name=chaofeng這樣的參數指定容器運行的用戶。
