Write the Code. Change the World.

1月 03

使用 docker 是很方便,有的时候掉进去,却找不到原因。使用 docker-compose 对服务进行编排是一个很常见的场景。当执行 docker-compose up -d 的时候,无论是服务端代码,还是配置代码,都是正确的,日志也是正确的。可是容器总是会 Exited 状态。这个时候就很着急。其实,容器退出的原因一般是因为错误和不在前台运行导致的。既然没有错误,那估计就是容器没在前台运行。

今天使用 alpine 为基础镜像,安装一个 supervisord 作为守护进程,然后就是自己的业务环境 skynet 和 skynet 的业务代码。当以前都配置的很好,编写的很好,状态也很好的时候。容器就是退出。这个是一个很痛苦的事情。其实,还是对容器退出没理解透彻。

下边是启动时候,打印的一些日志。

nanjing_dev  | NanjingDevServer                 STARTING
nanjing_dev  | NanjingDevServer                 RUNNING   pid 14, uptime 0:00:50
nanjing_dev  | Proto Recv-Q Send-Q Local Address           Foreign Address         State
nanjing_dev  | tcp        0      0 127.0.0.11:33351        0.0.0.0:*               LISTEN
nanjing_dev  | tcp        0      0 0.0.0.0:8105            0.0.0.0:*               LISTEN
nanjing_dev  | udp        0      0 127.0.0.11:36173        0.0.0.0:*

没有任何错误。错误就在容器没有在前台运行。因为服务是用 supervisord 来启动的。让 supervisord 在前台运行不就好了。这个时候只需要修改 supervisor_xxx.ini 的配置文件,将启动方式改为前台即可。

[supervisord]
nodaemon=true

就是 nodaemon 设置为 true。 默认是 false 哈。