Claude Code storage

File Write Operations Failing with Permission Errors

Your application fails when trying to write files to disk, throwing EACCES, EPERM, or permission denied errors. File uploads, log writing, cache storage, or report generation all fail because the application process doesn't have write access to the target directories.

This commonly happens when Claude Code generates code that writes to absolute paths like /tmp, /var, or the project root directory, but the deployment environment (Docker container, cloud function, or restricted server) doesn't allow writes to those locations.

The code works perfectly in local development where you run as an admin user, but breaks immediately in production where the application runs as a restricted service account.

Error Messages You Might See

Error: EACCES: permission denied, open '/var/data/output.pdf' EPERM: operation not permitted, mkdir '/app/uploads' OSError: [Errno 13] Permission denied: '/opt/data/cache' Read-only file system
Error: EACCES: permission denied, open '/var/data/output.pdf'EPERM: operation not permitted, mkdir '/app/uploads'OSError: [Errno 13] Permission denied: '/opt/data/cache'Read-only file system

Common Causes

  • Hardcoded absolute paths — Code writes to /tmp or /var/data which may be read-only in containerized environments
  • Read-only filesystem in serverless — Cloud functions and some container runtimes have read-only root filesystems
  • Docker container running as non-root — The application user inside the container doesn't own the target directory
  • Missing directory creation — Code tries to write a file before creating its parent directory
  • SELinux or AppArmor restrictions — Security modules blocking file writes even when Unix permissions allow them

How to Fix It

  1. Use os.tmpdir() or platform-agnostic paths — Replace hardcoded paths with Node's os.tmpdir() or Python's tempfile.gettempdir()
  2. Create directories before writing — Always call fs.mkdirSync(dir, {recursive: true}) or os.makedirs(dir, exist_ok=True) before file operations
  3. Use /tmp in serverless — In AWS Lambda or similar, /tmp is the only writable directory. Configure your app to use it
  4. Set correct Docker permissions — Add RUN chown -R appuser:appuser /app/data in your Dockerfile for writable directories
  5. Use object storage for production — Replace local file writes with S3, GCS, or Supabase Storage for production deployments

Real developers can help you.

Sage Fulcher Sage Fulcher Hey I'm Sage! Im a Boston area software engineer who grew up in South Florida. Ive worked at a ton of cool places like a telehealth kidney care startup that took part in a billion dollar merger (Cricket health/Interwell health), a boutique design agency where I got to work on a ton of exciting startups including a photography education app, a collegiate Esports league and more (Philosophie), a data analytics as a service startup in Cambridge (MA) as well as at Phillips and MIT Lincoln Lab where I designed and developed novel network security visualizations and analytics. I've been writing code and furiously devoted to using computers to make people’s lives easier for about 17 years. My degree is in making computers make pretty lights and sounds. Outside of work I love hip hop, the Celtics, professional wrestling, magic the gathering, photography, drumming, and guitars (both making and playing them) Matt Butler Matt Butler Software Engineer @ AWS rayush33 rayush33 JavaScript (React.js, React Native, Node.js) Developer with demonstrated industry experience of 4+ years, actively looking for opportunities to hone my skills as well as help small-scale business owners with solutions to technical problems ISHANTDEEP SINGH ISHANTDEEP SINGH Senior Software Engineer with 7+ years of experience in React, JavaScript, TypeScript, Next.js, and Node.js. I’ve also worked as a tech lead for startups, owning end-to-end technical execution including architecture, development, scaling, and delivery. I bring a strong mix of hands-on coding, product thinking, and technical leadership, and I’m comfortable building products from scratch as well as improving and scaling existing systems. David Olverson David Olverson Solo dev shipping production apps with AI-assisted development. I specialize in rescuing broken Lovable/Bolt/Cursor builds and taking them to production. 10+ apps shipped including SaaS CRMs, gaming platforms, real estate tools, and Discord bots. Stack: Next.js 16, TypeScript, Tailwind CSS, FastAPI, PostgreSQL, Prisma. I use Claude Code with 50+ custom skills for rapid delivery. Average turnaround: 2-4 weeks from broken prototype to production. Kingsley Omage Kingsley Omage Fullstack software engineer passionate about AI Agents, blockchain, LLMs. Pratik Pratik SWE with 15+ years of experience building and maintaining web apps and extensive BE infrastructure Matthew Butler Matthew Butler Systems Development Engineer @ Amazon Web Services BurnHavoc BurnHavoc Been around fixing other peoples code for 20 years. hanson1014 hanson1014 Full-stack developer experienced in fixing and deploying AI-generated apps from Lovable, Bolt.new, Cursor, and Replit. I specialize in debugging Supabase integration issues (auth flows, RLS policies, database connections), fixing broken deployments, resolving routing/blank screen problems, and cleaning up messy React/Vite codebases. I also build production apps with the Claude API and have shipped a Mac desktop dev tool (Nexterm from scratch. Based in Hong Kong, fast turnaround.

You don't need to be technical. Just describe what's wrong and a verified developer will handle the rest.

Get Help

Frequently Asked Questions

Why does file writing work locally but not in production?

Local development typically runs as your user with full permissions. Production environments (Docker, serverless, cloud VMs) run as restricted users with limited filesystem access. Always use platform-appropriate writable directories.

Where can I write files in AWS Lambda?

Only the /tmp directory is writable in Lambda, with a 512MB limit (configurable up to 10GB). For persistent storage, upload to S3 instead of writing locally.

Related Claude Code Issues

Can't fix it yourself?
Real developers can help.

You don't need to be technical. Just describe what's wrong and a verified developer will handle the rest.

Get Help