Docker: run as host user (fixes permission denied in data/ on Linux)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-26 20:38:30 +02:00
co-authored by Claude Opus 5.5
parent 0d289879f4
commit 4a948128e5
5 changed files with 26 additions and 1 deletions
+3 -1
View File
@@ -1,6 +1,8 @@
bin/ bin/
obj/ obj/
data/ data/*
!data/.gitkeep
*.user *.user
.vs/ .vs/
publish/ publish/
.env
+2
View File
@@ -12,6 +12,8 @@ FROM mcr.microsoft.com/dotnet/runtime:10.0
WORKDIR /app WORKDIR /app
COPY --from=build /app . COPY --from=build /app .
ENV MSCO_DATA=/data ENV MSCO_DATA=/data
# läuft als beliebige Benutzer-ID (docker compose "user:") - dann gibt es kein eigenes Home
ENV HOME=/tmp
# Befehle an den laufenden Server: docker exec msco-server msco players # Befehle an den laufenden Server: docker exec msco-server msco players
RUN printf '#!/bin/sh\nexec dotnet /app/MSCO.Server.dll --cmd "$@"\n' > /usr/local/bin/msco && chmod +x /usr/local/bin/msco RUN printf '#!/bin/sh\nexec dotnet /app/MSCO.Server.dll --cmd "$@"\n' > /usr/local/bin/msco && chmod +x /usr/local/bin/msco
VOLUME /data VOLUME /data
+18
View File
@@ -37,6 +37,24 @@ docker compose up -d --build # erster Start legt data/server.json an und bee
Anderer Port: in `data/server.json` **und** in `docker-compose.yml` ändern. Anderer Port: in `data/server.json` **und** in `docker-compose.yml` ändern.
### Linux: „Permission denied“ in `data/`
Der Container läuft als Benutzer-ID **1000** (der erste Linux-Benutzer), damit dir die Dateien in `data/` gehören.
Hat dein Benutzer eine andere ID (`id -u` / `id -g`), trag sie in eine `.env` neben der `docker-compose.yml` ein:
```bash
echo "MSCO_UID=$(id -u)" > .env
echo "MSCO_GID=$(id -g)" >> .env
```
Wurden Dateien schon von einer älteren Version als root angelegt, einmal zurückholen:
```bash
docker compose down
sudo chown -R $(id -u):$(id -g) data
docker compose up -d --build
```
## Ohne Docker ## Ohne Docker
**Linux (systemd):** .NET 10 Runtime installieren (`sudo apt install dotnet-runtime-10.0`), dann **Linux (systemd):** .NET 10 Runtime installieren (`sudo apt install dotnet-runtime-10.0`), dann
View File
+3
View File
@@ -14,6 +14,9 @@ services:
server: server:
build: . build: .
container_name: msco-server container_name: msco-server
# Als dein Linux-Benutzer laufen (nicht root), damit du in data/ selbst Dateien anlegen/ändern darfst.
# Andere ID? `id -u` / `id -g` ausgeben und in .env als MSCO_UID / MSCO_GID eintragen.
user: "${MSCO_UID:-1000}:${MSCO_GID:-1000}"
restart: "on-failure:3" # bei fehlendem Schlüssel/Spielstand nicht endlos neu starten restart: "on-failure:3" # bei fehlendem Schlüssel/Spielstand nicht endlos neu starten
stdin_open: true # Server-Konsole per docker attach stdin_open: true # Server-Konsole per docker attach
tty: true tty: true