1. 问题描述
使用dockerfile构建一个新的镜像,运行镜像成容器后大概三秒容器退出
2. 原因
Docker容器后台运行,就必须有一个前台进程.
我构建的镜像在执行CMD [ "/usr/local/emqttd/bin/emqttd", "start" ] 后,emqttd进程以后台的方式运行,程序启动命令执行完毕后,前台任务没有了,容器也就退出了
3. 解决
将程序的启动命令写入脚本里,脚本里添加一个一直在前台执行的任务:tail -f /dev/null
运行镜像时用后台方式:# docker run -itd local/emqttd1:latest
[root@aaa emqttd]# cat Dockerfile
FROM daocloud.io/library/centos:7.7.1908
ENV mydir /usr/local
WORKDIR $mydir
ADD emqttd.tar.gz /usr/local/
ADD start.sh /
CMD [ "/bin/sh", "-c", "/start.sh" ]
[root@aaa emqttd]# cat start.sh
#!/bin/bash
/usr/local/emqttd/bin/emqttd start
tail -f /dev/null
或
# cat Dockerfile2
FROM daocloud.io/library/centos:7.7.1908
ENV mydir /usr/local
WORKDIR $mydir
ADD emqttd.tar.gz /usr/local/
ADD start.sh /
EXPOSE 18083
CMD /usr/local/emqttd/bin/emqttd start && tail -F /dev/null
网友评论