2核2G ECS的Docker生存指南:Swap、镜像加速、避免重build

一台2核2G的ECS,第一次build花了3小时。不是因为代码多,是因为内存太小,ffmpeg编译直接卡死。

问题:build一次要3小时

docker compose up --build --force-recreate每次都会从零安装依赖、编译ffmpeg,2G内存的ECS根本扛不住。

解决方案:

1. 加4G Swap

bash
# 创建swap文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

2. 换阿里云apt镜像源

dockerfile
# Dockerfile中
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
RUN sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list

3. 能复用镜像就复用

bash
# 早上build过的镜像还在 → 直接up -d
docker compose up -d

# 只改前端时,只build frontend(5-10分钟)
docker compose build frontend
docker compose up -d

不要轻易--force-recreate全量rebuild后端。 ffmpeg在2G ECS上编译可能要几十分钟甚至更久。

Docker Hub镜像拉取超时

配置阿里云镜像加速器:

bash
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -A 1 "Registry Mirrors"

端口被占用

text
Bind for 0.0.0.0:80 failed: address already in use

原因: 系统Apache/Nginx已占80端口。

处理: Docker前端映射8080:80,宿主机Nginx监听80转发到8080/8081。或者systemctl stop httpd && systemctl disable httpd

踩坑总结

2G ECS是小马拉大车。核心策略是:能不build就不build,build时尽量只build改动的部分。

posted @ 2026-06-26 17:01  竹雨禅月  阅读(13)  评论(0)    收藏  举报