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"]
?