zoukankan      html  css  js  c++  java
  • docker容器启动后自动停止,dockerfile编写的容器启动后也是自动停止

    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这样的参数指定容器运行的用户。

  • 相关阅读:
    jQuery基础---filter()和find()
    js数组去重的4个方法
    各种排序算法的分析及java实现
    js三种对话框
    js数组与字符串的相互转换
    java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法
    Django REST framework视图
    Django REST framework序列化
    Django REST framework简介
    Django REST framework认证、权限、频率
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/12085276.html
Copyright © 2011-2022 走看看