Docker安装Nginx出现方法弃用日志 如何SSH进入容器修复错误
前置说明
你日志里的这几条弃用提示不是Nginx本身的报错,是容器内运行的Node.js服务依赖的Objection.js ORM框架抛出的API废弃警告,和Nginx配置无关,需要修改业务侧的ORM调用代码解决。
操作步骤
1. 登录Docker宿主机
先通过SSH连接到运行Docker服务的宿主机,执行命令:
ssh 你的宿主机登录账号@宿主机公网/内网IP
输入密码完成登录后,执行以下命令列出所有运行中的容器,定位到你部署的目标Nginx容器,记录对应的容器ID:
docker ps
2. 进入容器内部
Docker容器不需要单独部署SSH服务即可进入内部交互终端,直接执行官方自带的exec命令即可(比在容器内装SSH更符合容器运行规范):
# 适用于Debian/Ubuntu/CentOS基础镜像 docker exec -it 你记录的容器ID /bin/bash # 如果是Alpine基础镜像,没有bash,用sh进入 docker exec -it 你记录的容器ID /bin/sh
如果你坚持要通过SSH直连容器,需要先进入容器执行apt update && apt install -y openssh-server(Alpine用apk add),配置sshd登录密码、开放22端口、做宿主机端口映射后才能连接,该方案不推荐。
3. 修改代码替换废弃API
进入容器后找到Node业务代码的存放路径,常见路径包括/app、/usr/share/nginx/服务目录、/opt/service,全局搜索以下废弃方法,按规则逐一替换:
- 所有
QueryBuilder#allowEager调用,直接替换为allowGraph,原有传参完全兼容,无需调整逻辑 - 所有
QueryBuilder#eager调用,直接替换为withGraphFetched,原有传参逻辑完全一致 - 所有QueryBuilder实例上的
omit调用,删除该方法,改用select显式指定需要查询返回的字段 - 所有Model实例上的
$omit调用,替换为手动剔除返回对象的冗余字段,或通过Objection自带的序列化过滤配置实现字段隐藏
4. 重启服务验证
代码修改完成后,重启容器内的Node服务:
- 如果是pm2托管的服务,执行
pm2 restart all - 如果是直接node进程启动的服务,先执行
ps aux | grep node找到对应进程ID,执行kill 进程ID后重新启动服务即可
注意:直接在运行中容器内修改的内容会在容器重启、重建后丢失,验证修改生效后,必须把调整后的代码同步到源码仓库,更新Docker构建流程重新构建镜像部署,否则下次发布后警告会复现。
内容的提问来源于stack exchange,提问作者Debbie
相关产品推荐
相关产品推荐

