Error uploading theme

I’m trying to determine what I might be missing on permissions here. I’ve customized the edition theme and edited the package.json a bit so its separate from the edition theme. i then zipped this and tried to upload. When I upload it I get the error mentioned towards the end of this post below in the server logs. im using docker and i have a few volume mounts

    volumes:
      - /home/ghost/containers/ghost_containername/content:/var/lib/ghost/content
      - /home/ghost/containers/ghost_containername/config.production.json:/var/lib/ghost/config.production.json
      - /home/ghost/containers/ghost_containername/BuiltInThemes/:/var/lib/ghost/current/content/themes/

i do not have problems uploading images to posts and within content on the page. i did reset permissions recursively on the /content and /BuiltInThemes folders on the host file system to 777 as a test and it didnt help.
I also tried to mount /tmp in the compose file like this and it did not help

    tmpfs:
      - /tmp:exec,mode=777

Whats curious is that i can see inside the container that the location /tmp/1db33462-3bcb-44a5-969a-7fdb4d6688af/themename/ is actually being created so it seems like it can write there, which is why I’m a little confused where the permissions are lacking

root@1518308dc5ba:/var/lib/ghost# ls /tmp/1db33462-3bcb-44a5-969a-7fdb4d6688af/themename/ -lha
total 0
d--------- 2 node node 40 Jun  6 12:07 .
drwxr-xr-x 3 node node 60 Jun  6 12:07 ..

  • How was Ghost installed and configured? docker compose - ghost:6 d77f1956f8b6
  • What Node version, database, OS & browser are you using? built in docker version
  • What errors or information do you see in the console?
[2026-06-06 12:07:19] ERROR "POST /ghost/api/admin/themes/upload/" 422 19ms

Failed to read zip file

"themename.zip"
"Your zip file might be corrupted, try unzipping and zipping again."

Error ID:
    441b56a0-61a0-11f1-9d69-c59d1d3f5ee4

Error Code:
    EACCES

Details:
    EACCES: permission denied, mkdir '/tmp/1db33462-3bcb-44a5-969a-7fdb4d6688af/themename/assets/'

----------------------------------------

Error: EACCES: permission denied, mkdir '/tmp/1db33462-3bcb-44a5-969a-7fdb4d6688af/themename/assets/'
    at /var/lib/ghost/versions/6.42.0/node_modules/.pnpm/gscan@6.2.0/node_modules/gscan/lib/read-zip.js:57:19
    at async Object.mkdir (node:internal/fs/promises:858:10)
    at async Extractor.extractEntry (/var/lib/ghost/versions/6.42.0/node_modules/.pnpm/extract-zip@2.0.1/node_modules/extract-zip/index.js:121:5)
    at async ZipFile.<anonymous> (/var/lib/ghost/versions/6.42.0/node_modules/.pnpm/extract-zip@2.0.1/node_modules/extract-zip/index.js:65:11)

Whats even more confusing is i can go into the container, su to the node user, and write to /tmp perfectly fine

I did determine one thing I was doing wrong, I had zipped up the theme wrong and there was a folder inside the zip with the theme name and all contents were inside that. I fixed that, but still having permissions errors post. I suspect that this is an incorrect error as I am able to upload a zip theme that I downloaded from another ghost admin page, which makes me believe that it is something I customized in the zip package.json. I can successfully move the theme contents to where i have the file system mapped and use the theme after restarting the container, so there is something peculiar with this unzip process.
I can even download the zip from one site that I manually placed on that server, and then import that into another site, and the zip files contents are identical when comparing them with winmerge. this points to something with 7zip then zipping up these files? very odd. what is a normal process or requirements for zipping up a theme to upload?