$ -weight: 600;">sudo mount -t nfs -o vers=4 nlb-dns.amazonaws.com:/ /mnt/s3files
-weight: 600;">sudo mount -t nfs -o vers=4 nlb-dns.amazonaws.com:/ /mnt/s3files
-weight: 600;">sudo mount -t nfs -o vers=4 nlb-dns.amazonaws.com:/ /mnt/s3files
mount -t nfs4 -o nfsvers=4.2 nlb-dns.amazonaws.com:/ /mnt/s3files
mount -t nfs4 -o nfsvers=4.2 nlb-dns.amazonaws.com:/ /mnt/s3files
mount -t nfs4 -o nfsvers=4.2 nlb-dns.amazonaws.com:/ /mnt/s3files
Docker → Mac TCP bridge (IPv4:2049) → IPv6 → Mount Target (SG opened for my IPv6)
Docker → Mac TCP bridge (IPv4:2049) → IPv6 → Mount Target (SG opened for my IPv6)
Docker → Mac TCP bridge (IPv4:2049) → IPv6 → Mount Target (SG opened for my IPv6)
ERROR efs_proxy::nfs::nfs_reader Error handling parsing error SendError { .. }
ERROR efs_proxy::nfs::nfs_reader Error handling parsing error SendError { .. }
ERROR efs_proxy::nfs::nfs_reader Error handling parsing error SendError { .. }
# 1. Deploy infrastructure (VPC, bucket, IAM role, S3 Files, NLB)
cd infra && -weight: 500;">npm -weight: 500;">install && npx cdk deploy -c region=ca-central-1 # 2. Mount
./-weight: 500;">docker/-weight: 500;">docker-mount.sh up <NLB_DNS_from_CDK_output> # 3. Use it
ls /tmp/s3files/
echo "hello world" > /tmp/s3files/test.txt
open /tmp/s3files # opens in Finder
code /tmp/s3files # opens in VS Code
# 1. Deploy infrastructure (VPC, bucket, IAM role, S3 Files, NLB)
cd infra && -weight: 500;">npm -weight: 500;">install && npx cdk deploy -c region=ca-central-1 # 2. Mount
./-weight: 500;">docker/-weight: 500;">docker-mount.sh up <NLB_DNS_from_CDK_output> # 3. Use it
ls /tmp/s3files/
echo "hello world" > /tmp/s3files/test.txt
open /tmp/s3files # opens in Finder
code /tmp/s3files # opens in VS Code
# 1. Deploy infrastructure (VPC, bucket, IAM role, S3 Files, NLB)
cd infra && -weight: 500;">npm -weight: 500;">install && npx cdk deploy -c region=ca-central-1 # 2. Mount
./-weight: 500;">docker/-weight: 500;">docker-mount.sh up <NLB_DNS_from_CDK_output> # 3. Use it
ls /tmp/s3files/
echo "hello world" > /tmp/s3files/test.txt
open /tmp/s3files # opens in Finder
code /tmp/s3files # opens in VS Code
cd infra && npx cdk deploy -c region=ca-central-1
./-weight: 500;">docker/-weight: 500;">docker-mount.sh up <NLB_DNS>
cd infra && npx cdk deploy -c region=ca-central-1
./-weight: 500;">docker/-weight: 500;">docker-mount.sh up <NLB_DNS>
cd infra && npx cdk deploy -c region=ca-central-1
./-weight: 500;">docker/-weight: 500;">docker-mount.sh up <NLB_DNS> - Metadata pre-warms instantly. When you create a file system, all S3 key prefixes are mapped to directories and files. ls works immediately — no waiting. This is a massive differentiator from FUSE-based tools like Mountpoint, where ls on a large dataset can take minutes because it does a HEAD or LIST call per object.
- Small files (under 128KB) auto-sync on directory access. When you cd into a directory, code files, configs, and small assets are pulled into the fast tier automatically. No explicit fetch needed.
- Large files stream directly from S3. Files over 128KB are lazy-loaded on first read, and very large files may be served directly from S3's throughput layer without ever being copied into the file system tier. This is the ReadBypass optimization in efs-proxy — designed for EC2, but as we'll see, it doesn't play well with our non-standard Docker + NLB setup. - NFSv4.2 — macOS ships with NFSv4.0. The NFS client is baked into the kernel. You can't -weight: 500;">upgrade it.
- TLS encryption — S3 Files rejects every unencrypted NFS connection. No exceptions.
- IAM authentication — Every mount requires an EFS RPC Bind handshake with AWS credentials, handled by a binary called efs-proxy (part of amazon-efs-utils). This only runs on Linux. - Docker (Amazon Linux) — provides NFSv4.2 kernel support
- efs-proxy — handles TLS + IAM authentication
- NLB — bridges Docker Desktop to the VPC mount target
- nodirects3read — avoids the ReadBypass crash
- WebDAV — re-exports the NFS mount to macOS as a native folder - S3 Files enforces TLS encryption and IAM authentication on every connection — you can't mount without valid AWS credentials
- The NLB security group only allows inbound TCP 2049
- The mount target security group only accepts traffic from the NLB security group