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