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

如何使用docker-compose将AWS EFS挂载到Docker容器内?

问题排查与修复方案

核心错误点

  • EFS端点拼写错误:你配置中addr=fs-xxxxxx.efs.useast1.amazonaws.com的区域标识写错,正确AWS区域格式是us-east-1,少了中间的横杠,这是触发invalid argument报错的直接原因。
  • 卷驱动类型配置错误:driver_opts.type不需要写nfs4,直接填nfs即可,NFS版本通过o参数里的nfsvers=4.1指定即可,部分Docker版本对nfs4的类型标识兼容性差。
  • 宿主节点缺少NFS依赖:挂载EFS(NFS协议)的操作是Docker daemon在ECS宿主节点层面执行的,你在Dockerfile中安装的依赖仅作用于容器内部,对挂载操作无效,ECS实例宿主需要提前安装NFS客户端工具。
  • 安全组策略未放行:如果端点配置正确仍挂载失败,需要检查网络策略:EFS的安全组需要允许ECS实例所在安全组访问TCP 2049端口,ECS实例的安全组需要放通到EFS的TCP 2049端口出站规则,且两者需在同一VPC的可用区内。

注意事项

如果你的ECS使用Fargate启动类型,该方案无法生效:Fargate不支持通过docker-compose自定义本地NFS卷挂载,必须通过任务定义配置EFS挂载。只有EC2启动类型的ECS集群可以用该docker-compose方案。

修改后的配置

docker-compose.yml

version: "3.9"
services:
  server:
    build: .
    image: xyz
    command: "gunicorn -w 4 -k uvicorn.workers.UvicornWorker app.server:server -b 0.0.0.0:8000"
    volumes:
      - type: volume
        source: efs_volume
        target: /mnt/efs_xyz
volumes:
  efs_volume:
    driver: local
    driver_opts:
      type: "nfs"
      o: "addr=fs-xxxxxx.efs.us-east-1.amazonaws.com,rw,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"
      device: ":/"

ECS宿主节点前置配置

在ECS实例的启动脚本(UserData)中添加NFS客户端安装命令:

  • 若宿主为Amazon Linux 2/CentOS/RHEL:
yum install -y nfs-utils
  • 若宿主为Ubuntu/Debian:
apt update && apt install -y nfs-common

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 13:09:03