自定义的进程
首先我们明确一个点,那就是 容器 要一直能够运行,需要一个进程始终运行,那么如下这种命令肯定是不行的:
CMD service mysql start
因为这个指令它在终端执行就结束了,它最终确实调用了 mysql 启动,但是它本身无法一直处于运行状态,所以这种指令构建的容器运行一会儿就会停止
解决方法
根据上面的问题,我们可以改善指令如下几种:
- 多执行一个 tail 日志的操作,这样的话整个指令不会结束
CMD service mysql start && tail -F /var/log/mysql/error.log
- 使用 mysqld_safe 来启动
CMD /usr/bin/mysqld_safe
这是mysql服务的前台启动方式,它也能够一直保持在前台运行状态
3. 使用自定义的脚本
CMD /start.sh
注意自定义脚本也要符合要求,不能够立即退出
前台or后台
其实区别在前面两种中已经展示了,在正常使用没有太多的区别,但是有一些情况下使用前台是比较好的,比如 启动一个 jar 程序或者一个 python 脚本
不过这里又出现了一个问题,如何查看程序的日志? 即使我们已经把 jar 程序 或者 python 脚本的日志输出到了定义的目录中,但是程序难免会出现异常,没有捕获到的异常往往在前台显示,所以应该如何看呢?
这个时候使用 docker exec -it container_id /bin/bash
是不行的,它会进入一个新的终端中,完全看不到启动容器前台的日志,所以需要使用 docker logs -f container_id
由它来打印标准输出的日志
评论