How to start pm2 server in a docker container

直接在 docker 的 container 中运行 PM2 可能会遇到以下问题:

1
PM2 dameon PID = 1
0 with /.pm2/pm2.log file not found

这是因为 /.pm2 目录不存在造成的。可能很多人此时会想到去创建该目录,事实上是不必要的,比较好的做法是使用官方提供的 dump 命令。

运行 PM2 的 Dockerfile ,可以参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM node:0.11.13
# or just node, without tag

RUN npm install -g pm2
RUN pm2 dump
# dump will start pm2 daemon and create everything needed

VOLUME ["/srv/apps", "/srv/logs", "/srv/server.json"]
# don't put the files in docker container, user -v

EXPOSE 3000

CMD ["pm2", "start", "/srv/server.json", "--no-daemon"]
# no daemon mode for docker

搞定。

No more sudo for using docker

操作 docker 的时候每次都需要 sudo 来提升权限,比较麻烦,可以有一个简单的方法来解决:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 如果 docker 用户组不存在,那么先添加docker用户组。
# 事实上例如在 CentOS 上使用 `yum` 安装的 docker,已经存在 docker 组
sudo groupadd docker
# 把当前使用的账号添加到 docker 组
sudo gpasswd -a username docker
# > Adding user username to group docker
# 然后 restart docker
sudo service docker restart
# 完成,但此时还是旧的环境状态,先注销
exit
# 再次登录
ssh you.server.ip
# 试试
docker images
# > REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
# Done!

cgconfig service error when the docker starts

当启动 Docker 服务的时候,遇到如下错误:

1
2
3
4
Starting cgconfig service: Error: cannot mount cpuset to /cgroup/cpuset: Device or resource busy
/sbin/cgconfigparser; error loading /etc/cgconfig.conf: Cgroup mounting failed
Failed to parse /etc/cgconfig.conf [FAILED]
Starting docker: [ OK ]

可以使用 cgclear 命令,清理一下。

之后记得先停止 Docker ,再启动。

1
2
3
cgclear
service docker stop
service docker start

PS. OS = CentOS