Skip to content

Commit 6aa532f

Browse files
committed
fix(satellite): resolve Docker volume permission issues preventing credential persistence
The satellite container failed to save credentials to persistent storage due to Docker volume permission mismatch. Volumes default to root:root ownership, but the container runs as non-root user (deploystack, uid=1001) for security.
1 parent 49ed172 commit 6aa532f

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

services/satellite/Dockerfile

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ FROM node:24-bookworm-slim
55
# Create deploystack user with home directory
66
RUN useradd -m -d /opt/deploystack -s /bin/bash deploystack
77

8-
# Install only essential runtime dependencies
8+
# Install essential runtime dependencies including gosu for privilege dropping
99
RUN apt-get update && \
1010
apt-get install -y --no-install-recommends \
1111
ca-certificates \
12+
gosu \
1213
&& rm -rf /var/lib/apt/lists/*
1314

1415
# Create mcp-cache base directory with proper ownership
@@ -32,6 +33,10 @@ RUN npm install --omit=dev --no-package-lock
3233
# Copy pre-built files
3334
COPY services/satellite/dist ./dist
3435

36+
# Copy entrypoint script
37+
COPY services/satellite/scripts/docker-entrypoint.sh /usr/local/bin/
38+
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
39+
3540
# Create a default .env file with development defaults
3641
# NODE_ENV=development ensures no nsjail isolation is used
3742
RUN echo "NODE_ENV=development" > .env && \
@@ -40,7 +45,6 @@ RUN echo "NODE_ENV=development" > .env && \
4045

4146
EXPOSE 3001
4247

43-
# Run as deploystack user
44-
USER deploystack
45-
48+
# Use entrypoint script that fixes permissions and drops privileges
49+
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
4650
CMD ["node", "--env-file=.env", "dist/index.js"]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# If running as root, fix permissions before dropping privileges
5+
if [ "$(id -u)" = "0" ]; then
6+
# Fix persistent_data directory permissions for Docker volume
7+
if [ -d "/app/persistent_data" ]; then
8+
echo "Fixing persistent_data directory permissions for deploystack user..."
9+
chown -R deploystack:deploystack /app/persistent_data
10+
chmod 755 /app/persistent_data
11+
echo "✓ Persistent data permissions fixed"
12+
fi
13+
14+
# Ensure all /app files are owned by deploystack user
15+
# This fixes any files that were created as root during build
16+
echo "Ensuring /app files are owned by deploystack user..."
17+
chown -R deploystack:deploystack /app
18+
echo "✓ App files permissions fixed"
19+
20+
# Drop privileges to deploystack user and execute command
21+
echo "Starting satellite as deploystack user..."
22+
exec gosu deploystack "$@"
23+
else
24+
# Already running as non-root user, just execute
25+
exec "$@"
26+
fi

0 commit comments

Comments
 (0)