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

posted @ 2019-12-23 18:25  峰哥ge  阅读(9025)  评论(0编辑  收藏  举报