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.shWORKDIR $MYPATH
EXPOSE 22 8080 8888 8563 3568 6123 6122 6124 8081 443
MAINTAINER app
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]