revert(docker): drop /backup chown from wait-for-db.sh
The fix shipped in 3ab3756 added /backup to the boot-time chown list.
That broke installs that don't bind-mount ./backup:/backup — the
single greedy `chown -R /a /b /c /backup` returned non-zero on any
individual failure, exiting the script and putting the backend into
a restart loop.
Reverting to the upstream-stable version. The original EACCES at
backup time is better fixed by admins pointing the backup destination
at a writable path via the admin UI (e.g. /app/storage/backups,
which the script already chowns) rather than baking a /backup
assumption into every install's boot path.
This commit is contained in:
+3
-18
@@ -11,15 +11,8 @@ set -e
|
|||||||
# other than root skip this branch — they own permissions themselves and hit
|
# other than root skip this branch — they own permissions themselves and hit
|
||||||
# the preflight check below instead.
|
# the preflight check below instead.
|
||||||
if [ "$(id -u)" = "0" ]; then
|
if [ "$(id -u)" = "0" ]; then
|
||||||
# /backup is the docker-compose `./backup:/backup` mount used by the
|
if ! chown -R nodejs:nodejs /app/storage /app/data /app/logs 2>/dev/null; then
|
||||||
# CRM + database backup writers. It's only chowned when it actually
|
echo "ERROR: failed to chown /app/storage, /app/data, /app/logs to nodejs (UID 1001)." >&2
|
||||||
# exists as a bind mount — installs that don't mount it (e.g. native
|
|
||||||
# / k8s deployments using a different backup destination) skip
|
|
||||||
# cleanly via the `[ -d /backup ]` guard.
|
|
||||||
_chown_dirs="/app/storage /app/data /app/logs"
|
|
||||||
[ -d /backup ] && _chown_dirs="$_chown_dirs /backup"
|
|
||||||
if ! chown -R nodejs:nodejs $_chown_dirs 2>/dev/null; then
|
|
||||||
echo "ERROR: failed to chown $_chown_dirs to nodejs (UID 1001)." >&2
|
|
||||||
echo " This usually means the host filesystem rejects chown (e.g. NFS without root squash" >&2
|
echo " This usually means the host filesystem rejects chown (e.g. NFS without root squash" >&2
|
||||||
echo " disabled, or a SELinux/AppArmor policy blocking the operation)." >&2
|
echo " disabled, or a SELinux/AppArmor policy blocking the operation)." >&2
|
||||||
echo " Workaround: pre-chown the host directories to 1001:1001 and pin 'user: \"1001:1001\"'" >&2
|
echo " Workaround: pre-chown the host directories to 1001:1001 and pin 'user: \"1001:1001\"'" >&2
|
||||||
@@ -36,15 +29,7 @@ fi
|
|||||||
# followed by a confusing migration error and a restart loop.
|
# followed by a confusing migration error and a restart loop.
|
||||||
_uid="$(id -u)"
|
_uid="$(id -u)"
|
||||||
_gid="$(id -g)"
|
_gid="$(id -g)"
|
||||||
# /backup is included here for symmetry with the root branch above:
|
for _dir in /app/storage /app/data /app/logs; do
|
||||||
# when the compose `user:` override is set, the host operator is
|
|
||||||
# expected to have chowned the bind mount themselves. Skip the
|
|
||||||
# check when the mount isn't present so non-bind-mounted setups
|
|
||||||
# (e.g. backup destination configured to local storage path) still
|
|
||||||
# boot cleanly.
|
|
||||||
_writable_dirs="/app/storage /app/data /app/logs"
|
|
||||||
[ -d /backup ] && _writable_dirs="$_writable_dirs /backup"
|
|
||||||
for _dir in $_writable_dirs; do
|
|
||||||
if [ ! -w "$_dir" ]; then
|
if [ ! -w "$_dir" ]; then
|
||||||
echo "ERROR: $_dir is not writable by UID $_uid." >&2
|
echo "ERROR: $_dir is not writable by UID $_uid." >&2
|
||||||
echo " Either drop the 'user:' override from your compose file so the container starts as" >&2
|
echo " Either drop the 'user:' override from your compose file so the container starts as" >&2
|
||||||
|
|||||||
Reference in New Issue
Block a user