> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/de/getting-started/docker.md).

# Docker

## Docker

### Überprüfen, ob Docker korrekt installiert ist

> **HINWEIS:** Apple M1-Geräte: Zum Zeitpunkt der Erstellung dieses Dokuments gibt es einige Probleme auf Apple M1-Geräten sowie auf einigen ARM64/ARMv8-Geräten. Bitte lesen Sie [das PowerShell Universal-Forum](https://forum.devolutions.net/product/powershell-universal), bevor Sie fortfahren.

#### Docker

Führen Sie den folgenden Befehl aus, um zu bestätigen, dass Docker installiert ist:

```
docker version
```

Beispielausgabe:

```
Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:47:01 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.1
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.5
  Git commit:       bc3805a
  Built:            Thu Feb  9 19:47:01 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.18
  GitCommit:        2456e983eb9e37e47538f59ea18f2043c9a73640
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

```

#### Docker Compose

Docker Compose v1 verwendet den Befehl `docker-compose`. Ab Juni 2023 endet der Support für Docker Compose v1.

Docker Compose v2 verwendet den Befehl `docker compose`.

Wenn Sie Docker Compose v1 verwenden, passen Sie die Befehle entsprechend an. Weitere Informationen zu Docker Compose finden Sie [hier](https://docs.docker.com/compose/).

Führen Sie einen der folgenden Befehle aus, um zu bestätigen, dass Docker Compose installiert ist:

Docker Compose v1:

```
docker-compose version
```

Docker Compose v2:

```
docker compose version
```

Beispielausgabe:

```
Docker Compose version v2.16.0
```

#### Ein Docker Hello-World

Um sicherzustellen, dass Docker Container-Images abrufen und ausführen kann, führen Sie den folgenden Befehl aus:

```
docker run hello-world
```

Beispielausgabe:

```
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:ffb13da98453e0f04d33a6eee5bb8e46ee50d08ebe17735fc0779d0349e889e9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
```

### Installation

### Verwendung des vorgefertigten Containers

Um PowerShell Universal auszuführen, verwenden Sie das bereitgestellte Container-Image. Das Docker-Image ist auf [Docker Hub](https://hub.docker.com/r/ironmansoftware/universal) verfügbar.

Die vorgefertigte Version unterstützt sowohl kostenlose als auch kostenpflichtige Funktionen von PowerShell Universal.

Starten Sie den Container, indem Sie das Image abrufen und dann einen Container mit dem gebundenen Standardport ausführen.

#### Ein einfaches Image ausführen

```
docker pull devolutions/powershell-universal
docker run --name 'PSU' -it -p 5000:5000 devolutions/powershell-universal
```

#### Ein Image auf einem anderen Port bereitstellen

Wenn Port 5000 auf Ihrem Host nicht verfügbar ist, wechseln Sie zu einem anderen Port.

z. B. Bereitstellung auf Port 80

```
docker pull devolutions/powershell-universal
docker run --name 'PSU' -it -p 80:5000 devolutions/powershell-universal
```

#### Ein Volume einbinden

Der Befehl `docker run` ermöglicht es Ihnen, ein Volume für persistenten Speicher einzubinden. Binden Sie das Volume in den Ordner /root ein.

**Ein Volume auf einem Container unter Windows einbinden**

Der folgende Befehl bindet den Ordner `C:\docker\volumes\PSU` in `/root` auf Ihrem Container ein:

```
docker pull devolutions/powershell-universal
docker run --name 'PSU' -it -p 5000:5000 -v C:\docker\volumes\PSU:/root devolutions/powershell-universal 
```

**Ein Volume auf einem Container unter Mac und Linux einbinden**

Der folgende Befehl bindet den Ordner `/docker/volumes/PSU` in `/root` auf Ihrem Container ein:

```
docker pull devolutions/powershell-universal
docker run --name 'PSU' -it -p 5000:5000 -v /docker/volumes/PSU:/root devolutions/powershell-universal 
```

#### Einen Container stoppen

Der folgende Befehl entfernt einen gestoppten Container namens `PSU`:

```
docker stop PSU
```

#### Einen Container entfernen

Der folgende Befehl stoppt einen Container namens `PSU`:

```
docker rm PSU
```

Das Flag `--force` kann einen laufenden Container entfernen:

```
docker rm --force PSU
```

### Docker Compose

Docker Compose ermöglicht es Ihnen, eine YAML-Textdatei zu verwenden, um Ihren Build zu standardisieren und die Bereitstellung (oder den Build) von mehreren Containern zu skripten.

Der Standardname für jede Compose-Datei ist `docker-compose.yml`. Es wird empfohlen, dies als Ihren Compose-Dateinamen zu verwenden.

#### Erstellen eines Compose-Skripts für Windows

Die folgende Compose-Datei führt einen PowerShell Universal-Container unter Windows aus:

```yml
version: "5.2.1"
services:
  PSU:
    container_name: PSU
    image: devolutions/powershell-universal:latest
    ports:
      - 5000:5000
    restart: unless-stopped
    environment:
      - TZ=Europe/London
    volumes:
      - C:\docker\volumes\PSU:/root
```

#### Erstellen eines Compose-Skripts für Mac / Linux

Die folgende Compose-Datei führt einen PowerShell Universal-Container unter Mac und Linux aus:

```yml
version: "5.2.1"
services:
  PSU:
    container_name: PSU
    image: devolutions/powershell-universal:latest
    ports:
      - 5000:5000
    restart: unless-stopped
    environment:
      - TZ=Europe/London
    volumes:
      - /docker/volumes/PSU:/root
```

#### Starten von Containern mit Compose-Skripten

Verwenden Sie eine Terminal-Shell oder PowerShell für Windows. Verwenden Sie den Befehl cd, um das Arbeitsverzeichnis zu dem Verzeichnis mit Ihrem `docker-compose.yml`-Skript zu wechseln.

Führen Sie den folgenden Befehl aus:

```
docker compose up -d
```

Beispielausgabe:

```
Creating network "PSU_default" with the default driver
Pulling PSU (devolutions/powershell-universal:latest)...
latest: Pulling from devolutions/powershell-universal
7608715873ec: Pull complete
4e66273c6cfb: Pull complete
2649c52300c2: Pull complete
a20175666bc7: Pull complete
65ce93bc0653: Pull complete
Digest: sha256:d7ff98e6197d21070aac325c2efbefa393a4952d2e8ba6b1327dc97824ec4d55
Status: Downloaded newer image for devolutions/powershell-universal:latest
Creating PSU ... done
```

#### Stoppen von Containern mit Compose-Skripten

Verwenden Sie eine Terminal-Shell oder PowerShell für Windows. Wechseln Sie mit cd in das Verzeichnis mit Ihrem `docker-compose.yml`-Skript.

Führen Sie den folgenden Befehl aus

```
docker compose down
```

Beispielausgabe:

```
[+] Running 2/2
 ⠿ Container PSU         Removed                                           0.5s
 ⠿ Network PSU_default   Removed                                           0.4s
```

#### Verwendung von Umgebungsvariablen und SQL-Persistenz

Sie können Umgebungsvariablen in Ihre Compose-Skripte einfügen. Unten finden Sie ein Beispiel für:

* Festlegen eines Knotennamens
* Hinzufügen von SQL-Persistenz
* Hinzufügen einer SQL-Verbindungszeichenfolge

```yaml
version: "5.2.1"
services:
  PSU:
    container_name: PSU
    image: devolutions/powershell-universal:latest
    ports:
      - 5000:5000
    restart: unless-stopped
    environment:
      - TZ=Europe/London
      - Plugins__0=SQL
      - Data__ConnectionString=Data Source=sql1.domain.com;Initial Catalog=PSUTicketBridge;User Id=psu_ticketbridge_dbo;Password=Password123;TrustServerCertificate=True;Trusted_Connection=True;integrated security=false;
      - NodeName=mynodename
    volumes:
      - /docker/volumes/PSU:/root
```

#### Verwendung von Umgebungsvariablen und PostgreSQL-Persistenz

Sie können Umgebungsvariablen in Ihre Compose-Skripte einfügen. Unten finden Sie ein Beispiel für:

* Festlegen eines Knotennamens
* Hinzufügen von PostgreSQL-Persistenz
* Hinzufügen einer PostgreSQL-Verbindungszeichenfolge

```yaml
version: "5.2.1"
services:
  PSU:
    container_name: PSU
    image: devolutions/powershell-universal:latest
    ports:
      - 5000:5000
    restart: unless-stopped
    environment:
      - TZ=Europe/London
      - Plugins__0=PostgreSQL
      - Data__ConnectionString=Host=PGhostname; Database=PGdatabase; User Id=PGusername; Password=PGpassword!;Port=5432
      - NodeName=mynodename
    volumes:
      - /docker/volumes/PSU:/root
```

### Erstellen eines benutzerdefinierten Containers

Wenn Sie weitere Funktionen erstellen, Umgebungsvariablen ändern oder fest in Ihren Container codieren möchten, erstellen Sie ein `Dockerfile`

> ***HINWEIS:*** Dockerfiles sind case-sensitiv und müssen mit einem großen 'D' beginnen.

Um ein Docker-Image zu erstellen, das die Universal-Daten persistieren kann, erstellen Sie ein Dockerfile wie das untenstehende.

Dieses Dockerfile stellt Port 5000 bereit, erstellt ein /data-Volume, legt Konfigurationsumgebungsvariablen fest, um das Universal-Repository und die Datenbank im Volume zu speichern, und setzt dann Universal.Server als Einstiegspunkt für den Container.

#### Schreiben eines Dockerfile-Skripts für Linux

```docker
FROM devolutions/powershell-universal:latest
LABEL description="Universal - The ultimate platform for building web-based IT Tools" 

EXPOSE 5000
VOLUME ["/home/data"]
ENV Data__RepositoryPath /home/data/Repository
ENV Data__ConnectionString Data Source=/home/data/database.db
ENV UniversalDashboard__AssetsFolder /home/data/UniversalDashboard 
ENV Logging__Path /home/data/logs/log.txt
ENTRYPOINT ["./Universal/Universal.Server"]
```

#### Erstellen eines Containers

Führen Sie im Pfad, der Ihr Dockerfile enthält, den folgenden Befehl aus:

```
docker build . --tag=universal-persistent
```

#### Windows

```docker
FROM devolutions/powershell-universal:5.0.0-windowsservercore-1809
LABEL description="Universal - The ultimate platform for building web-based IT Tools" 

EXPOSE 5000
VOLUME ["C:/data"]
ENV Data__RepositoryPath C:/data/Repository
ENV Data__ConnectionString Data Source=C:/data/database.db
ENV UniversalDashboard__AssetsFolder C:/data/UniversalDashboard 
ENV Logging__Path C:/data/logs/log.txt
ENTRYPOINT ["C:/ProgramData/Universal/Universal.Server.exe"]
```

Führen Sie einen Build mit dem Befehl build aus:

```
docker build . --tag=universal-persistent
```

Starten Sie den Docker-Container mit dem Befehl run und geben Sie dabei unbedingt das einzubindende Volume an:

```
docker run -it --name powershelluniversal --mount source=psudata,target=/home/data --rm -d  -p 5000:5000/tcp universal-persistent:latest
```

#### SQL

Um SQL-Persistenz zu verwenden, definieren Sie das Plugin und die Verbindungszeichenfolge wie folgt:

```
ENV Data__ConnectionString=Data Source=ServerName; Initial Catalog=DatabaseName; Integrated Security=SSPI;
ENV Plugins:0=SQL
```

#### PostgreSQL

Um PostgreSQL-Persistenz zu verwenden, definieren Sie das Plugin und die Verbindungszeichenfolge wie folgt:

```
ENV Data__ConnectionString=Host=PGhostname; Database=PGdatabase; User Id=PGusername; Password=PGpassword!;Port=5432
ENV Plugins:0=PostgreSQL
```

### Zeitzonen

Um Zeitzonen unter Linux bei der Planung von Aufträgen ordnungsgemäß zu unterstützen, fügen Sie das Paket `tzdata` in Ihr Dockerfile ein, zusammen mit einer Umgebungsvariablen, die die Serverzeitzone angibt.

```
ENV TZ Europe/Amsterdam
RUN apt-get install -y tzdata
```

## Tags

Wir veröffentlichen die folgenden Tags auf Docker Hub:

* latest - Aktuelle Version mit Ubuntu LTS
* 2026.x-\<OS>-\<PS> - Produktionsversion mit der angegebenen OS- und PS-Version
* 2026.x-modules - Aktuelle Produktionsversion auf Ubuntu LTS mit ausgewählten installierten AZ-Modulen
* 4.x-\<OS>-\<PS> - Aktuelle Produktionsversion 4 mit den angegebenen OS- und PS-Versionen

### Enthaltene Module

Die Modul-Container-Images enthalten die folgenden Module:

* Az.Accounts
* Az.Compute
* Az.KeyVault
* Az.Resources
* Invoke-SqlCmd2

## Zusammenfassung

Diese grundlegende Anleitung "Erste Schritte" ermöglicht es Ihnen, PSU-Container auszuführen oder zu erstellen. Dieser Referenzenabschnitt verlinkt alle Quellen für Befehle:

## Referenzen

### Container ausführen

<https://docs.docker.com/engine/reference/commandline/run/>

<https://docs.docker.com/engine/reference/commandline/stop/>

<https://docs.docker.com/engine/reference/commandline/rm/>

<https://docs.docker.com/compose/>

### Container erstellen

<https://docs.docker.com/engine/reference/commandline/build/>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/de/getting-started/docker.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
