最近几天研究了 docker ,出现这么个情况,我写了一个自建 lamp 的 dockerfile ,这个 dockerfile build的镜像能够在新建的容器里搭建 lamp 环境。写这个 dockerfile 的初衷是可以随时新建一个已经启动好 mysql 和 httpd 的容器,但是却实现不了,CMD 和 ENTRYPOINT 写的命令无法生效。因为 lamp 的 dockerfile 有点长,为了形象说明我的问题,我用铭哥写的安装 nginx 举个例子。
-
# 搭建 nginx 镜像
-
# Based on CentOS
-
-
FROM centos
-
MAINTAINER wangyl [email protected]
-
-
# 安装所需要的库文件
-
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 build centos_nginx .
然后启动容器
docker run -itd centos_nginx /bin/bash
docker exec -it 容器id /bin/bash
进入容器后,nginx 并没有启动,只能手动启动 nginx 。上面的 Dockerfile 的 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