最近几天研究了 docker ,出现这么个情况,我写了一个自建 lamp 的 dockerfile ,这个 dockerfile build的镜像能够在新建的容器里搭建 lamp 环境。写这个 dockerfile 的初衷是可以随时新建一个已经启动好 mysql 和 httpd 的容器,但是却实现不了,CMD 和 ENTRYPOINT 写的命令无法生效。因为 lamp 的 dockerfile 有点长,为了形象说明我的问题,我用铭哥写的安装 nginx 举个例子。docker build centos_nginx .
然后启动容器
docker run -itd centos_nginx /bin/bash
docker exec -it 容器id /bin/bash
进入容器后,nginx 并没有启动,只能手动启动 nginx 。上面的 Dockerfile 的 ENTRYPOINT 换成 CMD 也不行,请铭哥和大家帮忙解决下问题。
- # 搭建 nginx 镜像
- # Based on CentOS
- FROM centos
- MAINTAINER wangyl wangyllinux@aliyun.com
- # 安装所需要的库文件
- RUN yum install -y pcre-devel wget net-tools gcc
- RUN yum install -y zlib zlib-devel make
- RUN yum install -y openssl-devel
- # 安装 Nginx
- ADD http://nginx.org/download/nginx-1.8.0.tar.gz .
- RUN tar zxvf nginx-1.8.0.tar.gz
- RUN mkdir -p /usr/local/nginx
- RUN cd nginx-1.8.0 && ./configure --prefix=/usr/local/nginx && make && make install
- RUN rm -fv /usr/local/nginx/conf/nginx.conf
- COPY .nginx_conf /usr/local/nginx/conf/nginx.conf
- # 把80端口暴露出来
- EXPOSE 80
- # 添加 Nginx 的启动脚本
- # COPY /run.sh /usr/local/sbin/run.sh
- # RUN chmod 755 /usr/local/sbin/run.sh
- # When creating a new container
- ENTRYPOINT ["/bin/bash","/usr/local/nginx/sbin/nginx","-c","/usr/local/nginx/conf/nginx.conf"]
然后启动容器
docker run -itd centos_nginx /bin/bash
docker exec -it 容器id /bin/bash
进入容器后,nginx 并没有启动,只能手动启动 nginx 。上面的 Dockerfile 的 ENTRYPOINT 换成 CMD 也不行,请铭哥和大家帮忙解决下问题。
0
找到一个文档。
在Docker daemon模式下,无论你是使用ENTRYPOINT,还是CMD,最后的命令,一定要是当前进程需要一直运行的,才能够防容器退出。
以下无效方式:
ENTRYPOINT service tomcat7 start #运行几秒钟之后,容器就会退出
CMD service tomcat7 start #运行几秒钟之后,容器就会退出
这样有效:
ENTRYPOINT service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
# 或者
CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
所以,你可以在Dockerfile中最后一行改成:
ENTRYPOINT /usr/local/nginx/sbin/nginx && tail -f /etc/passwd
在Docker daemon模式下,无论你是使用ENTRYPOINT,还是CMD,最后的命令,一定要是当前进程需要一直运行的,才能够防容器退出。
以下无效方式:
ENTRYPOINT service tomcat7 start #运行几秒钟之后,容器就会退出
CMD service tomcat7 start #运行几秒钟之后,容器就会退出
这样有效:
ENTRYPOINT service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
# 或者
CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
所以,你可以在Dockerfile中最后一行改成:
ENTRYPOINT /usr/local/nginx/sbin/nginx && tail -f /etc/passwd
编辑回复