You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1芯片设备上Docker容器构建随机挂起问题求助

M1芯片设备上Docker构建随机挂起问题

问题现象

原本在非M1设备上稳定运行多年的Dockerfile,更换M1芯片设备后,构建时有50%以上概率随机挂起,最常卡在以下步骤:

RUN sed -i -e 's/\r$//' ./wildfly-command.sh

偶尔也会在其他步骤挂起,当卡在上述相关流程时,会看到输出==> Shutting down WildFly...后停止响应。

相关文件内容

wildfly-command.sh

#!/bin/bash

JBOSS_HOME=/opt/jboss/wildfly
JBOSS_CLI=$JBOSS_HOME/bin/jboss-cli.sh
JBOSS_MODE=${1:-"standalone"}
JBOSS_CONFIG=${2:-"$JBOSS_MODE.xml"}

function wait_for_wildfly() {
  until `$JBOSS_CLI -c "ls /deployment" &> /dev/null`; do
    sleep 1
  done
}

echo "==> Starting WildFly..."
$JBOSS_HOME/bin/$JBOSS_MODE.sh -c $JBOSS_CONFIG &

echo "==> Waiting..."
wait_for_wildfly

echo "==> Setup Datasource..."
$JBOSS_CLI -c --file=`dirname "$0"`/module-install.cli

echo "==> Shutting down WildFly..."
if [ "$JBOSS_MODE" = "standalone" ]; then
  $JBOSS_CLI -c ":shutdown"
else
  $JBOSS_CLI -c "/host=*:shutdown"
fi

Dockerfile

ARG PLATFORM
FROM --platform=$PLATFORM quay.io/wildfly/wildfly

# Install Maven
USER root
#RUN yum install -y maven && yum clean all

# Install necessary packages
RUN yum -y install wget

# Download and extract Maven
RUN wget https://downloads.apache.org/maven/maven-3/3.9.1/binaries/apache-maven-3.9.1-bin.tar.gz -P /tmp \
  && tar xf /tmp/apache-maven-3.9.1-bin.tar.gz -C /opt \
  && ln -s /opt/apache-maven-3.9.1 /opt/maven \
  && rm /tmp/apache-maven-3.9.1-bin.tar.gz

# Set Maven environment variables
ENV MAVEN_HOME /opt/maven
ENV PATH ${MAVEN_HOME}/bin:${PATH}


# Set Postgresql env variables
ENV DB_HOST postgres
ENV DB_PORT 5432
ENV DB_NAME postgres
ENV DB_USER postgres
ENV DB_PASS gjAFk3!Rk2#!lapA@
ENV hbm2ddl create
ENV DS_NAME PostgresXADS
ENV JNDI_NAME java:jboss/PostgresXADS

ADD https://jdbc.postgresql.org/download/postgresql-42.6.0.jar /tmp/postgresql-42.6.0.jar

WORKDIR /tmp
COPY input_files/wildfly-command.sh ./
COPY input_files/module-install.cli ./
RUN sed -i -e 's/\r$//' ./wildfly-command.sh
RUN chmod +x ./wildfly-command.sh
RUN ./wildfly-command.sh \
    &&  rm -rf $JBOSS_HOME/standalone/configuration/standalone_xml_history/

# Build the war
COPY pom.xml ./
COPY src ./src/
RUN mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true

# Add deployments
ADD target/cryptonews-1.1.war /opt/jboss/wildfly/standalone/deployments/

RUN /opt/jboss/wildfly/bin/add-user.sh admin P@ssword --silent

CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]

解决办法

针对M1芯片上Docker构建随机挂起的问题,试试从这几个方向调整:

1. 修复WildFly启动/关闭的阻塞问题

从现象看,挂起常卡在wildfly-command.sh的关闭环节,大概率是arm64架构下WildFly的CLI命令没响应或者超时。给脚本加个超时机制,同时增强关闭逻辑:
修改wildfly-command.sh里的wait_for_wildfly函数和关闭部分:

function wait_for_wildfly() {
  local timeout=30
  local count=0
  # 最多等30秒,避免无限等待
  until `$JBOSS_CLI -c "ls /deployment" &> /dev/null` || [ $count -ge $timeout ]; do
    sleep 1
    count=$((count+1))
  done
  if [ $count -ge $timeout ]; then
    echo "ERROR: WildFly启动超时了"
    exit 1
  fi
}

# 关闭WildFly时,如果CLI命令失败,直接杀进程
echo "==> Shutting down WildFly..."
if [ "$JBOSS_MODE" = "standalone" ]; then
  $JBOSS_CLI -c ":shutdown" || pkill -f "$JBOSS_MODE.sh"
else
  $JBOSS_CLI -c "/host=*:shutdown" || pkill -f "$JBOSS_MODE.sh"
fi

2. 优化平台兼容性

  • 构建时明确指定平台,避免Docker自动适配出问题:
    用这个命令构建:
    docker build --platform=linux/amd64 -t 你的镜像名 .
    
    或者直接在Dockerfile里固定平台(如果不需要跨平台):
    FROM --platform=linux/amd64 quay.io/wildfly/wildfly
    
  • 检查quay.io/wildfly/wildfly有没有官方arm64版本,优先用对应架构的镜像,减少模拟层的bug和性能问题。

3. 调整Docker Desktop设置

在M1的Docker Desktop里改这些设置试试:

  • 增加CPU和内存分配(偏好设置→资源),避免构建时资源不够卡壳。
  • 关掉"Use the new Virtualization framework"选项(有些旧版WildFly在这个框架下有兼容问题)。
  • 打开"Rosetta for x86/amd64 emulation on Apple Silicon",提升x86镜像的模拟性能。

4. 合并构建步骤

把wildfly-command.sh的处理和执行合并成一个RUN命令,减少Docker层的交互:

WORKDIR /tmp
COPY input_files/wildfly-command.sh ./
COPY input_files/module-install.cli ./
RUN sed -i -e 's/\r$//' ./wildfly-command.sh \
    && chmod +x ./wildfly-command.sh \
    && ./wildfly-command.sh \
    && rm -rf $JBOSS_HOME/standalone/configuration/standalone_xml_history/

内容的提问来源于stack exchange,提问作者user3362334

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:42:55