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

Docker容器内大型Ember项目构建缓慢甚至停滞的问题求助

问题描述

我正尝试将本地开发环境Docker化,目的是简化新开发者入职流程,确保全员使用统一的本地环境。但目前遇到构建性能瓶颈:大型Ember应用(包含数百个组件)的构建编译过程会中途停滞,无法完成;但用小型示例Ember应用测试时无此问题,且在主机机器上构建完全正常,仅容器内速度极慢甚至卡死。

环境信息

  • 主机:M3 Mac Pro,12核CPU,18GB可用内存
  • Podman配置:默认机器分配12核CPU、12GB内存,未限制单个容器资源

当前使用的Dockerfile

# BASE IMAGE Amazon Linux:2
FROM amazonlinux:2

# Set up workdir
ENV APP_DIR /app
WORKDIR $APP_DIR
VOLUME [$APP_DIR]

# INSTALL dependencies
RUN yum update -y && \
    yum install -y git sudo wget curl cups-libs && \
    yum groupinstall -y "Development Tools" && \
    curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash - && \
    yum install -y nodejs python-devel openssl-devel && \
    yum clean all && rm -rf /var/cache/yum

# INSTALL Google chrome stable
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm && \
  yum install -y ./google-chrome-stable_current_x86_64.rpm && \
  yum clean all && rm -rf /var/cache/yum

# INSTALL NVM and Ember CLI
RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash && source /root/.nvm/nvm.sh && \
    nvm install 12.16.3 && \
    npm install ember-cli@3.8.3 -g

RUN echo 'source /root/.nvm/nvm.sh && nvm use 12.16.3' >> /root/.bashrc

# install watchman
RUN git clone https://github.com/facebook/watchman.git && \
  cd watchman && \
  git stash && \
  git checkout -f v4.9.0 && \
  ./autogen.sh && \
  ./configure && \
  make && \
  make install

RUN /bin/bash -c "if ! yarn --version >/dev/null 2>&1; then npm install -g yarn; fi && source /root/.nvm/nvm.sh && nvm use 12.16.3" && \
  yarn global add bower && \
  echo '{ "allow_root": true }' > /root/.bowerrc

EXPOSE 4200 7153

CMD ["bash"]

容器内top命令输出

Tasks: 274 total,   2 running, 272 sleeping,   0 stopped,   0 zombie
%Cpu(s):  8.3 us,  0.0 sy,  0.0 ni, 91.6 id,  0.0 wa,  0.1 hi,  0.0 si,  0.0 st 
MiB Mem :  11924.1 total,   5362.0 free,   5765.5 used,   1022.6 buff/cache     
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   6158.6 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                                                      
   4262 root      20   0   11.1g   4.4g  34964 R  99.7  37.5   6:09.23 ember                                                                                                                                                                         
      1 root      20   0   77288  27420  10764 S   0.0   0.2   0:00.03 systemd                                                                                                                                                                       
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.03 kthreadd

备注:我试过用CI流水线的Dockerfile(用于PR单元测试),同样出现构建缓慢且无法完成的情况,怀疑是mac osxfs的问题?


解决方案建议
  • 解决文件系统性能瓶颈:Mac上容器绑定挂载主机目录时,osxfs确实会在大量文件读写场景(比如Ember遍历数百个组件编译)下出现性能问题,可尝试:

    • 先将代码COPY进容器内构建,避免跨文件系统的频繁IO;如果需要开发热重载,改用Podman的:delegated挂载选项,减少主机与容器的文件同步开销
    • 升级到最新版Podman,新版本对Mac文件系统的兼容性和性能有优化
  • 精简Dockerfile减少冗余:

    • 移除重复的Node安装:当前Dockerfile同时安装了Node14和Node12.16.3,冗余且易导致环境冲突,保留nvm安装方式即可
    • 合并RUN指令减少镜像层数,利用缓存机制避免重复下载安装包
  • 优化Ember构建配置:

    • 关闭不必要的调试插件或选项,减少编译时的IO和CPU消耗
    • 开启并行构建:在ember build命令中添加--parallel参数,充分利用多核心CPU资源
  • 调整内存与Swap配置:给Podman机器开启Swap分区,避免Ember编译时因虚拟内存不足导致进程停滞

  • 更换轻量基础镜像:Amazon Linux 2环境较重,改用Node官方镜像(比如node:12.16.3-alpine),镜像体积更小、环境更精简,减少系统开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:32:07