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/
|
bin/
|
||||||
obj/
|
obj/
|
||||||
data/
|
data/*
|
||||||
|
!data/.gitkeep
|
||||||
*.user
|
*.user
|
||||||
.vs/
|
.vs/
|
||||||
publish/
|
publish/
|
||||||
|
.env
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user