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

  • 相关阅读:
    Java 中无参带返回值方法的使用
    Java 中无参无返回值方法的使用
    如何定义 Java 中的方法
    Java 中的二维数组
    使用 foreach 操作数组
    使用 Arrays 类操作 Java 中的数组
    如何使用 Java 中的数组
    Java 循环语句之多重循环
    UML常用图的几种关系的总结
    JAVA 对象引用,以及对象赋值
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/12085276.html
Copyright © 2020-2023  润新知