docker容器啟動后自動停止,dockerfile編寫的容器啟動后也是自動停止


看到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這樣的參數指定容器運行的用戶。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM