新建容器后,dockerfile里的ENTRYPOINT/CMD命令不生效

回复 收藏
最近几天研究了 docker ,出现这么个情况,我写了一个自建 lamp 的 dockerfile ,这个 dockerfile build的镜像能够在新建的容器里搭建 lamp 环境。写这个 dockerfile 的初衷是可以随时新建一个已经启动好 mysql 和 httpd 的容器,但是却实现不了,CMD 和 ENTRYPOINT 写的命令无法生效。因为 lamp 的 dockerfile 有点长,为了形象说明我的问题,我用铭哥写的安装 nginx 举个例子。
  1. # 搭建 nginx 镜像
  2. # Based on CentOS
  3. FROM centos
  4. MAINTAINER wangyl wangyllinux@aliyun.com
  5. # 安装所需要的库文件
  6. RUN yum install -y pcre-devel wget net-tools gcc
  7. RUN yum install -y zlib zlib-devel make
  8. RUN yum install -y openssl-devel
  9. # 安装 Nginx
  10. ADD http://nginx.org/download/nginx-1.8.0.tar.gz .
  11. RUN tar zxvf nginx-1.8.0.tar.gz
  12. RUN mkdir -p /usr/local/nginx
  13. RUN cd nginx-1.8.0 && ./configure --prefix=/usr/local/nginx && make && make install
  14. RUN rm -fv /usr/local/nginx/conf/nginx.conf
  15. COPY .nginx_conf /usr/local/nginx/conf/nginx.conf
  16. # 把80端口暴露出来
  17. EXPOSE 80
  18. # 添加 Nginx 的启动脚本
  19. # COPY /run.sh /usr/local/sbin/run.sh
  20. # RUN chmod 755 /usr/local/sbin/run.sh
  21. # When creating a new container
  22. 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 也不行,请铭哥和大家帮忙解决下问题。
2016-06-07 18:43 举报
已邀请:
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

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: