技术实践
日常思考

京东代挂 Docker 部署记录:容器运行、通知与安全注意事项

使用 Docker 跑定时任务的好处比较明显:环境和宿主机隔离,依赖统一,后面需要停止或者删除的时候也比较干净。

jd-scripts-docker 就是这类方案中的一个,主要通过 Docker 容器运行 Node.js 定时任务,并支持日志查看和消息通知。

这类项目依赖第三方平台接口和账号会话信息,接口、活动规则以及登录验证随时可能变化,所以本文主要记录 Docker 部署方式和使用时需要注意的地方。实际使用前建议先确认项目当前状态以及对应平台的使用规则。

项目结构

项目原地址:

https://gitee.com/quincy_Zhou/jd-scripts-docker

这类项目通常会包含:

  • Dockerfile
  • docker-compose 配置
  • Node.js 任务脚本
  • 定时任务配置
  • 环境变量配置
  • 消息通知配置

容器启动后,由内部的定时任务按照设定时间执行对应脚本。

大概可以理解为:

VPS / NAS
   ↓
Docker
   ↓
任务容器
   ↓
Node.js 脚本
   ↓
定时执行
   ↓
日志 / 消息通知

Docker 运行效果

下面是通过 Docker 管理器运行容器时的效果:


京东代挂 Docker 容器运行界面

可以看到任务本身运行在独立容器中,这样即使脚本依赖发生冲突,也不会直接污染宿主机的 Node.js 环境。

先安装 Docker

服务器还没有 Docker 的话,可以先使用 Docker 官方安装脚本:

curl -fsSL https://get.docker.com | sh

安装完成后启动 Docker:

systemctl enable --now docker

检查:

docker --version
docker compose version

正常能够返回版本信息就可以继续。

现在的新版本 Docker 已经集成 Compose v2,一般直接使用:

docker compose

不需要再单独安装以前的 docker-compose 二进制文件。

拉取项目

服务器安装 Git 后,将项目拉到本地:

git clone https://gitee.com/quincy_Zhou/jd-scripts-docker.git
cd jd-scripts-docker

如果原仓库已经迁移、停止维护或者无法访问,不建议随便找一个来源不明的镜像直接运行。

这类脚本通常会接触账号会话信息,一旦代码被修改,理论上就可能读取配置中的敏感数据。

配置文件

项目运行前需要按照仓库说明配置相关环境变量。

通常会涉及:

账号会话信息
任务开关
消息通知
定时任务
其他脚本参数

这里最重要的是账号会话信息。

这类数据本质上相当于已经登录后的凭据,拿到以后可能在一定范围内代表当前账号进行请求,所以不要:

  • 上传到公开 GitHub / Gitee 仓库
  • 直接发到论坛或聊天群
  • 截图时保留完整内容
  • 写进公开 Docker 镜像
  • 通过不可信的网页或插件提取

如果怀疑相关会话信息已经泄露,建议直接退出相关登录会话、修改账号安全设置,并重新登录获取新的会话状态。

启动容器

配置完成后可以先查看 Compose 配置:

docker compose config

确认没有明显语法错误以后再启动:

docker compose up -d

查看当前容器:

docker compose ps

或者:

docker ps

如果容器处于正常运行状态,说明 Docker 部分基本没有问题。

查看日志

脚本有没有正常启动,最直接的方法就是看日志。

docker compose logs

实时查看:

docker compose logs -f

如果只想看最后一部分:

docker compose logs --tail=100

遇到任务不执行时,我一般先看这里,而不是直接反复重建容器。

重点检查:

  • 配置文件有没有读取成功
  • Node.js 是否报错
  • 网络请求是否超时
  • 账号会话是否已经失效
  • 定时任务是否正常加载

消息通知

项目支持将任务结果或者异常情况推送到消息服务。

下面这张是使用 Server 酱配置通知时的界面:


Server酱消息推送配置

截图中的密钥已经做了隐藏处理。

消息推送的作用主要是容器后台运行以后,不需要每天 SSH 登录服务器查看日志。

常见场景包括:

  • 任务执行结果
  • 配置失效提醒
  • 脚本运行异常
  • 账号状态变化

无论使用哪种通知平台,Token、Key、Webhook 地址都建议当作密码处理,不要直接放在公开文章和截图里。

停止和重新启动

停止容器:

docker compose down

重新启动:

docker compose up -d

只重启现有容器:

docker compose restart

如果只是修改环境变量,通常重新创建容器更稳妥:

docker compose down
docker compose up -d

更新项目

如果项目本身仍然正常维护,可以先进入项目目录:

git status

确认自己有没有修改文件。

没有本地修改的话,再根据项目说明更新:

git pull

然后重新构建或者启动容器。

不过这类自动任务项目和普通 Web 程序不太一样,不建议设置成不经过检查就自动拉取最新代码并立即执行。

如果上游仓库被误提交、依赖被污染或者脚本逻辑发生较大变化,自动更新反而会直接把风险带到服务器。

不要使用高权限容器

如果项目没有明确需要,不建议给容器加入:

--privileged

也不要随便挂载:

/var/run/docker.sock
/
 /root

这类宿主机敏感路径。

普通 Node.js 定时任务没有必要获得整个宿主机的控制权限。

服务器上还需要注意什么

如果只是后台运行定时任务,一般没有必要给容器映射公网端口。

也就是说,如果项目本身没有 Web 管理页面,就不要为了方便随便开放:

0.0.0.0:xxxx

能够不监听公网就尽量不监听。

另外建议定期检查:

docker ps
docker images
docker compose logs --tail=100

确认没有异常容器、异常镜像和持续报错。

项目失效时不要继续硬改

京东这类平台的接口、验证方式和活动规则都会变化。

如果出现大量接口失效、验证码、登录验证或者脚本长期无人维护,通常说明项目已经不适合继续使用。

这种情况下不建议为了让旧脚本继续跑,去关闭账号安全功能或者安装来路不明的绕过工具。

直接停止容器:

docker compose down

确认没有需要保留的配置以后,再删除项目目录即可。

最后

这种 Docker 方案最值得记录的其实不是具体某一个任务脚本,而是把 Node.js 定时任务放进容器运行的方式。

Docker 可以把运行环境和宿主机隔离开,查看日志、停止、删除也比较方便。

不过项目涉及账号会话信息时,安全性比“能不能跑起来”更重要。仓库来源、配置文件权限、消息通知密钥以及更新方式都值得注意。

如果上游已经停止维护或者平台规则发生变化,就没有必要为了继续运行旧任务去降低账号和服务器的安全设置。

赞(0) 打赏
未经允许不得转载:Kelro Blog » 京东代挂 Docker 部署记录:容器运行、通知与安全注意事项

评论 抢沙发