curl: (7)Failed connect to ip:port;Connection timed out returned a non-zero code: 7

问题现象

负责安全测试的同学需要部署洞态 IAST,通过 java 探针的方式附加到应用服务上,在项目下添加了一个 Dockerfile 文件:

FROM prasadlvi/openjdk-11-jre
WORKDIR /home

ENV TZ 'Asia/Shanghai' 
ENV LANG en_US.UTF-8 
ENV LANGUAGE en_US:en 
ENV LC_ALL en_US.UTF-8
ARG renv
ENV renv=${renv}
COPY service/target/*.jar /home

RUN curl -LJO "http://ip:port/openapi/api/v1/agent/download?url=http://ip:port/openapi&language=java" -H "Authorization: Token 7475b7dfb0abdea8acbf77161b4f2d2276322997" -o /home/agent/dongtai-agent.jar -k

ENTRYPOINT java  -javaagent:"/home/agent/dongtai-agent.jar" -Dengine.name='project'  -jar  -server -Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/error_data *.jar --spring.profiles.active=$renv

提交到 GitLab 之后,WebHook 触发 Jenkins 拉取源码、编译,在构建镜像的时候报错:
curl 报错

看日志是连接 dongtai 服务器超时。

问题分析

最初怀疑是构建镜像的机器,禁用了指定的 port 端口。

找到另一台构建机器,iptables 禁用 port 端口,复现过一次,后面怎么都复现不了。

试了一天,最后测试同学发现,dongtai 服务端的 token 超时后,能复现问题。

问题原因

toekn 过期导致 dongtai 客户端无法注册到服务端。

Agent 每分钟向 Dongtai OpenAPI 服务发送心跳数据,若 Dongtai OpenAPI 服务 2 分钟未收到心跳,则 Agent 被判定为停止。

解决方案

将下载 dongtai-agent.jar 的命令放到 Jenkins 流水线脚本中:

curl -LJO "http://ip:port/openapi/api/v1/agent/download?url=http://ip:port/openapi&language=java" -o /home/agent/dongtai-agent.jar -k

同时去除 Dockerfile 中的 RUN curl 命令。

posted @ 2022-10-01 08:45  ageovb  阅读(975)  评论(0编辑  收藏  举报