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:
+3
-1
@@ -1,6 +1,8 @@
|
||||
bin/
|
||||
obj/
|
||||
data/
|
||||
data/*
|
||||
!data/.gitkeep
|
||||
*.user
|
||||
.vs/
|
||||
publish/
|
||||
.env
|
||||
|
||||
@@ -12,6 +12,8 @@ FROM mcr.microsoft.com/dotnet/runtime:10.0
|
||||
WORKDIR /app
|
||||
COPY --from=build /app .
|
||||
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
|
||||
RUN printf '#!/bin/sh\nexec dotnet /app/MSCO.Server.dll --cmd "$@"\n' > /usr/local/bin/msco && chmod +x /usr/local/bin/msco
|
||||
VOLUME /data
|
||||
|
||||
@@ -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.
|
||||
|
||||
### 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
|
||||
|
||||
**Linux (systemd):** .NET 10 Runtime installieren (`sudo apt install dotnet-runtime-10.0`), dann
|
||||
|
||||
@@ -14,6 +14,9 @@ services:
|
||||
server:
|
||||
build: .
|
||||
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
|
||||
stdin_open: true # Server-Konsole per docker attach
|
||||
tty: true
|
||||
|
||||
Reference in New Issue
Block a user