<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Update app : Read-only file system]]></title><description><![CDATA[<p dir="auto">Hello,</p>
<p dir="auto">I’m encountering an issue when updating my custom app: I get a Read-only file system error, but I’m unsure why it only occurs during updates. The deployment to a new URL works fine, but when updating, I see the following error:</p>
<pre><code>Jul 28 17:00:02 mkdir: can't create directory '/certs/ca': Read-only file system
</code></pre>
<p dir="auto">My app is a Java application with the following Docker configuration:</p>
<pre><code>FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4

RUN mkdir -p /app/code
WORKDIR /app/code

RUN apt-get update &amp;&amp; apt-get install -y openjdk-21-jdk-headless &amp;&amp; rm -rf /var/cache/apt /var/lib/apt/lists

# copy code
ADD ./cicd/start.sh /app/code/

COPY ./target/back-0.0.1-SNAPSHOT.jar /app/code/back.jar
COPY ./src/main/resources/application-prod.properties /app/code/application-prod.properties

CMD [ "/app/code/start.sh" ]
</code></pre>
<p dir="auto">The <a href="http://start.sh" target="_blank" rel="noopener noreferrer nofollow ugc">start.sh</a> script is as follows:</p>
<pre><code class="language-sh">#!/bin/bash

set -eu
chown -R cloudron:cloudron /app/data

echo "Starting app server"

exec gosu cloudron:cloudron java -jar myApp.jar --spring.profiles.active=prod
</code></pre>
<p dir="auto">During the first deployment, everything works correctly, and the app starts fine. However, when I update the JAR file, I encounter this error:</p>
<pre><code>Jul 28 17:03:03 mkdir: can't create directory '/certs/ca': Read-only file system
Jul 28 17:03:47 =&gt; Healtheck error: Error: Timeout of 7000ms exceeded
Jul 28 17:03:56 =&gt; Healtheck error: Error: connect EHOSTUNREACH 172.18.18.128:8080
</code></pre>
<p dir="auto">Here is the manifest used for deploying my app:</p>
<pre><code class="language-json">{
  "version": "0.0.2",
  "healthCheckPath": "/",
  "httpPort": 8080,
  "addons": {
    "localstorage": {},
    "postgresql": {},
    "redis": {}
  },
  "icon": "file://logo.png",
 "manifestVersion": 2
}
</code></pre>
<p dir="auto">I have checked various forums and the web but couldn’t find any solutions specific to my issue. Could anyone help me with this?</p>
<p dir="auto">Thanks and have a nice day!</p>
]]></description><link>https://forum.cloudron.io/topic/12182/update-app-read-only-file-system</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 09:29:48 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/12182.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Jul 2024 15:10:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Update app : Read-only file system on Wed, 31 Jul 2024 10:25:12 GMT]]></title><description><![CDATA[<p dir="auto">Glad you got it sorted out!</p>
]]></description><link>https://forum.cloudron.io/post/92063</link><guid isPermaLink="true">https://forum.cloudron.io/post/92063</guid><dc:creator><![CDATA[joseph]]></dc:creator><pubDate>Wed, 31 Jul 2024 10:25:12 GMT</pubDate></item><item><title><![CDATA[Reply to Update app : Read-only file system on Tue, 30 Jul 2024 20:31:52 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/joseph" aria-label="Profile: joseph">@<bdi>joseph</bdi></a><br />
I found my problem. It was a typo (user error). When I was running the following command: <code>cloudron update --image [image_name] --app [name_app]</code>, I accidentally added an unexpected parameter, resulting in <code>cloudron update --image docker pull [image_name] --app [name_app]</code>. Naturally, this didn’t work, but I must admit I can’t explain why the error message was something other than a fail to load...</p>
<p dir="auto">Sorry again for the inconvenience.</p>
]]></description><link>https://forum.cloudron.io/post/92053</link><guid isPermaLink="true">https://forum.cloudron.io/post/92053</guid><dc:creator><![CDATA[stephan]]></dc:creator><pubDate>Tue, 30 Jul 2024 20:31:52 GMT</pubDate></item><item><title><![CDATA[Reply to Update app : Read-only file system on Tue, 30 Jul 2024 07:32:56 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/stephan" aria-label="Profile: stephan">@<bdi>stephan</bdi></a> mysterious. Something somewhere is calling mkdir. Could it be an obsolete docker image? (maybe you didn't build?) Do you know anything about that line? Cloudron is just running the docker image... <s>Is your code/image public by any chance to have a look?</s> I guess it is the code that you posted and nothing else? If so, there is nothing here that calls mkdir.</p>
<p dir="auto">You can try this:</p>
<ul>
<li><code>cloudron debug</code> . This puts the app in debug mode, meaning it won't start.</li>
<li><code>cloudron exec</code> . You now get a shell into the container</li>
<li>Run <a href="http://start.sh" target="_blank" rel="noopener noreferrer nofollow ugc">start.sh</a> manually . Try to figure if mkdir is coming from here</li>
</ul>
]]></description><link>https://forum.cloudron.io/post/92018</link><guid isPermaLink="true">https://forum.cloudron.io/post/92018</guid><dc:creator><![CDATA[joseph]]></dc:creator><pubDate>Tue, 30 Jul 2024 07:32:56 GMT</pubDate></item><item><title><![CDATA[Reply to Update app : Read-only file system on Mon, 29 Jul 2024 17:40:43 GMT]]></title><description><![CDATA[<p dir="auto">The mkdir error appear before Starting app server :</p>
<pre><code class="language-text">Jul 29 19:36:19 2024-07-29T17:36:19.712Z INFO 1 --- [API] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
Jul 29 19:36:20 box:services teardownAddons: Tearing down []
Jul 29 19:36:20 box:tasks update 446: {"percent":45,"message":"Downloading icon"}
Jul 29 19:36:20 box:tasks update 446: {"percent":60,"message":"Updating addons"}
Jul 29 19:36:20 box:services setupAddons: Setting up ["localstorage","postgresql","redis"]
Jul 29 19:36:20 box:services setupAddons: setting up addon localstorage with options {}
Jul 29 19:36:20 box:services setupLocalStorage
Jul 29 19:36:20 box:shell createVolume /usr/bin/sudo -S /home/yellowtent/box/src/scripts/mkdirvolume.sh /home/yellowtent/appsdata/ca96d396-a77a-40a5-9ff8-707f40525bfa/data
Jul 29 19:36:20 box:services setupAddons: setting up addon postgresql with options {}
Jul 29 19:36:20 box:services Setting up postgresql
Jul 29 19:36:20 box:services Setting postgresql addon config to ...
Jul 29 19:36:20 box:services setupAddons: setting up addon redis with options {}
Jul 29 19:36:20 box:services Re-using existing redis container with state: {"Status":"running","Running":true,"Paused":false,"Restarting":false,"OOMKilled":false,"Dead":false,"Pid":380849,"ExitCode":0,"Error":"","StartedAt":"2024-07-29T17:32:35.671184747Z","FinishedAt":"0001-01-01T00:00:00Z"}
Jul 29 19:36:20 box:services Waiting for redis-ca96d396-a77a-40a5-9ff8-707f40525bfa
Jul 29 19:36:20 [GET] /healthcheck
Jul 29 19:36:20 box:tasks update 446: {"percent":70,"message":"Creating container"}
Jul 29 19:36:20 box:apptask createContainer: creating container
Jul 29 19:36:20 box:shell addLogrotateConfig /usr/bin/sudo -S /home/yellowtent/box/src/scripts/configurelogrotate.sh add ca96d396-a77a-40a5-9ff8-707f40525bfa /tmp/ca96d396-a77a-40a5-9ff8-707f40525bfa.logrotate
Jul 29 19:36:20 box:apptask startApp: starting container
Jul 29 19:36:21 mkdir: can't create directory '/certs/ca': Read-only file system
Jul 29 19:36:21 box:tasks update 446: {"percent":90,"message":"Configuring reverse proxy"}
Jul 29 19:36:21 box:tasks update 446: {"percent":100,"message":"Done"}
Jul 29 19:36:21 box:taskworker Task took 10.293 seconds
Jul 29 19:36:21 box:tasks setCompleted - 446: {"result":null,"error":null}
Jul 29 19:36:21 box:tasks update 446: {"percent":100,"result":null,"error":null}
Jul 29 19:36:21 mkdir: can't create directory '/certs/ca': Read-only file system
</code></pre>
<p dir="auto">In this exemple, i use the same docker image. Just execute and update with :</p>
<pre><code class="language-sh">cloudron update --image docker pull myapp.domain.com/myImageDocker:1.0 --app test-java
</code></pre>
]]></description><link>https://forum.cloudron.io/post/91995</link><guid isPermaLink="true">https://forum.cloudron.io/post/91995</guid><dc:creator><![CDATA[stephan]]></dc:creator><pubDate>Mon, 29 Jul 2024 17:40:43 GMT</pubDate></item><item><title><![CDATA[Reply to Update app : Read-only file system on Mon, 29 Jul 2024 16:33:26 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/stephan" aria-label="Profile: stephan">@<bdi>stephan</bdi></a> I just noticed that you had a log line <code>Starting app server</code> . Does the mkdir error appear before or after log line ?</p>
]]></description><link>https://forum.cloudron.io/post/91993</link><guid isPermaLink="true">https://forum.cloudron.io/post/91993</guid><dc:creator><![CDATA[joseph]]></dc:creator><pubDate>Mon, 29 Jul 2024 16:33:26 GMT</pubDate></item><item><title><![CDATA[Reply to Update app : Read-only file system on Mon, 29 Jul 2024 16:31:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/joseph" aria-label="Profile: joseph">@<bdi>joseph</bdi></a>  The <a href="http://start.sh" target="_blank" rel="noopener noreferrer nofollow ugc">start.sh</a> file is entirety.<br />
The java app is a spring app with redis and postgres.<br />
In that case, why is it that on a first deployment I don't get the error and for the same version of the docker image I could get this error?</p>
<p dir="auto">I'll have another look, but even locally I don't create files, I expose an api and store data in the database.</p>
<p dir="auto">Thank for your answer.</p>
]]></description><link>https://forum.cloudron.io/post/91991</link><guid isPermaLink="true">https://forum.cloudron.io/post/91991</guid><dc:creator><![CDATA[stephan]]></dc:creator><pubDate>Mon, 29 Jul 2024 16:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to Update app : Read-only file system on Mon, 29 Jul 2024 07:28:51 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/stephan" aria-label="Profile: stephan">@<bdi>stephan</bdi></a> is that the entirety of <a href="http://start.sh" target="_blank" rel="noopener noreferrer nofollow ugc">start.sh</a> ? If so, <code>myApp.jar</code> is calling <code>mkdir</code> command at some point and trying to create a directory named <code>/certs/ca</code> . It's not allowed to create directories arbitrarily inside the container, that is why the command fails with EROFS.</p>
]]></description><link>https://forum.cloudron.io/post/91952</link><guid isPermaLink="true">https://forum.cloudron.io/post/91952</guid><dc:creator><![CDATA[joseph]]></dc:creator><pubDate>Mon, 29 Jul 2024 07:28:51 GMT</pubDate></item></channel></rss>