dockerfile + java + supervisord 成功构建

Dockerfile 文件:

FROM hub.c.163.com/wangyiyunbaiyufei/java1.8

MAINTAINER 904790581@qq.com

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai">/etc/timezone

#RUN yum makecache
#RUN yum install -y epel-release
#RUN yum install -y supervisor
RUN mkdir -p /data/supervisor
RUN mkdir /data/docker
COPY sgms-app.jar /data/supervisor/
ADD supervisord.conf /etc/supervisord.conf
ADD app-supervisor.ini /etc/supervisord.d/

#ENTRYPOINT ["/usr/bin/supervisord"]
#ENTRYPOINT /usr/bin/supervisord -c /etc/supervisord.conf
ENTRYPOINT ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]

 

supervisord.conf 文件

[unix_http_server]
file=/data/supervisor/supervisor.sock ; the path to the socket file

[supervisord]
logfile=/data/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false ; start in foreground if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///data/supervisor/supervisor.sock ; use a unix:// URL for a unix socket

[include]
files = /etc/supervisord.d/*.ini

 

 app-supervisor.ini  文件

[supervisord]                    daemon开启的话会把服务放在后台启动,会导致Dockerfile中构建的镜像所创建的容器  docker  run  -itd  运行不起来  
nodaemon=true               

[program:sgms]
command=/usr/bin/java -jar /data/supervisor/sgms-app.jar
process_name=%(program_name)s
autostart=true
user=root
stdout_logfile=/tmp/app.log
stderr_logfile=/tmp/app.error
[program:sshd]
command=/usr/sbin/sshd -D
process_name=%(program_name)s
autostart=true

 

 

然后去启动容器:docker  run  -itd   --name  <名字>  -p  <映射端口>   <imagesname>    

                         进入容器  docker  exec -it   <容器名字或id>   bash 

 

高能高能,坑来了:   在*.ini文件中,nodaemon=true表示把supervisord这个服务不放在后台运行 ------如果不指定的话,会导致你创建出来的容器死活都启动不了,就算run  -itd启动了,容器里边的supervisord也不会自己启动

前台运行后台运行了解一下 - - 

拍错思路: 查看Dockerfile文件 -------> 查看supervisord.conf文件中,*.ini指定的文件位置路径是否正确,服务前后台运行的问题--------->查看ini文件中,启动服务文件位置、启动指令、supervisord服务前后台运行的问题

 

posted @ 2018-05-10 09:21  天宇星空  阅读(570)  评论(0)    收藏  举报