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服务前后台运行的问题

浙公网安备 33010602011771号