skywalking-agent-docker镜像

FROM centos:7.9.2009

USER root

定义 Arthas 目录环境变量

ENV ARTHAS_HOME=/opt/arthas

更改 YUM 源并清理缓存

RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak && \

rm -rf /etc/yum.repos.d/* && \

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \

yum clean all && yum makecache fast && yum update -y && \

yum install -y \

gcc gcc-c++ kernel-devel yum-utils device-mapper-persistent-data lvm2 \

tcpdump vim git wget net-tools libpcap libpcap-devel automake make \

pam-devel openldap-devel cyrus-sasl-devel openssl-devel telnet rsync \

bzip2 iptables lsof curl su-exec expect net-tools \

gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel \

libpng-devel openssl-devel bison flex \

glibc-devel libstdc++ && \

yum clean all && rm -rf /var/cache/yum/*

设置时区

RUN rm -f /etc/localtime && \

ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \

echo "Asia/Shanghai" > /etc/timezone && \

echo "TZ=Asia/Shanghai" >> /etc/profile

安装 JDK 17

COPY jdk-17.0.14_linux-x64_bin.rpm /home/

RUN rpm -ivh --nodeps /home/jdk-17.0.14_linux-x64_bin.rpm && \

rm -f /home/jdk-17.0.14_linux-x64_bin.rpm && \

echo "export JAVA_HOME=/usr/java/jdk-17" >> /etc/profile && \

echo "export CLASSPATH=.:\$JAVA_HOME/lib" >> /etc/profile && \

echo "export PATH=\PATH:\\JAVA_HOME/bin" >> /etc/profile && \

source /etc/profile

COPY arthas-bin /opt/arthas/

ENV ARTHAS_HOME=/opt/arthas

赋予可执行权限

RUN chmod +x $ARTHAS_HOME/*

安装 Arthas(修正版本和链接)

#RUN mkdir -p ARTHAS_HOME \&\& wget -O ARTHAS_HOME/arthas-boot.jar https://repo1.maven.org/maven2/com/aliyun/arthas/arthas-boot/3.7.8/arthas-boot-3.7.8.jar && echo "alias arthas='java -jar $ARTHAS_HOME/arthas-boot.jar'" >> /etc/profile

处理 SkyWalking Agent

处理 SkyWalking Agent(修复目录不存在问题)

RUN mkdir -p /usr/skywalking # 提前创建上级目录

ADD apache-skywalking-java-agent-9.4.0.tgz /tmp/

验证解压后的目录名称,若正确则继续移动

RUN if [ -d "/tmp/skywalking-agent" ]; then \

mv /tmp/skywalking-agent /usr/skywalking/agent && \

ls /usr/skywalking/agent/ && \

mv /usr/skywalking/agent/optional-plugins/* /usr/skywalking/agent/plugins/ && \

mv /usr/skywalking/agent/optional-reporter-plugins/* /usr/skywalking/agent/plugins/ && \

rm -rf /tmp/*; \

else \

echo "Error: /tmp/skywalking-agent not found"; \

exit 1; \

fi

系统配置(最终修复 exit code:1 问题)

RUN set -ex && \

安装必要组件:SELinux 工具、iptables 基础命令

yum install -y selinux-policy-targeted policycoreutils iptables && \

修改 SELinux 配置文件为 disabled

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && \

优化 SELinux 状态判断语法(添加括号确保优先级)

if (sestatus 2>/dev/null || true) | grep -q "SELinux status:.*enabled"; then \

容错处理:即使 setenforce 失败(如 SELinux 已禁用),也不终止步骤

setenforce 0 || true; \

else \

echo "SELinux is already disabled, skipping setenforce"; \

fi && \

确保 iptables 命令存在后清理规则,容错执行失败

if [ -x "$(command -v iptables)" ]; then \

iptables -F && iptables -X || true; \

else \

echo "iptables command not found, skipping cleanup"; \

fi && \

清理 yum 缓存

yum clean all

环境变量

ENV LANG=C.UTF-8 \

TZ=Asia/Shanghai \

MYPATH=/ \

JAVA_HOME=/usr/java/jdk-17 \

PATH=$PATH:/usr/java/jdk-17/bin

处理入口脚本

COPY docker-entrypoint.sh /usr/local/bin/

RUN chmod +x /usr/local/bin/docker-entrypoint.sh

WORKDIR $MYPATH

EXPOSE 22 8080 8888 8563 3568 6123 6122 6124 8081 443

MAINTAINER app

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]