Note
Auf GitHub gehostete Runner werden aktuell nicht auf GitHub Enterprise Server unterstützt. Weitere Informationen zur geplanten zukünftigen Unterstützung findest Du in der GitHub public roadmap.
Übersicht
Verwende jobs.<job_id>.container, um einen Container zu erstellen, in dem alle Schritte eines Jobs ausgeführt werden, die noch keinen Container angeben. Wenn ein Schritt sowohl Skript- als auch Container-Aktionen umfasst, werden die Container-Aktionen als nebengeordnete Container in demselben Netzwerk mit denselben Volume-Mounts ausgeführt.
Wenn du keinen container festlegst, werden alle Schritte direkt auf dem durch runs-on angegebenen Host ausgeführt, es sei denn, ein Schritt bezieht sich auf eine Aktion, die für die Ausführung in einem Container konfiguriert ist.
Note
Die Standardshell für run-Schritte innerhalb eines Containers lautet sh anstatt bash. Dies kann mit jobs.<job_id>.defaults.run oder jobs.<job_id>.steps[*].shell überschrieben werden.
Beispiel: Ausführen eines Auftrags innerhalb eines Containers
name: CI
on:
  push:
    branches: [ main ]
jobs:
  container-test-job:
    runs-on: ubuntu-latest
    container:
      image: node:18
      env:
        NODE_ENV: development
      ports:
        - 80
      volumes:
        - my_docker_volume:/volume_mount
      options: --cpus 1
    steps:
      - name: Check for dockerenv file
        run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)
name: CI
on:
  push:
    branches: [ main ]
jobs:
  container-test-job:
    runs-on: ubuntu-latest
    container:
      image: node:18
      env:
        NODE_ENV: development
      ports:
        - 80
      volumes:
        - my_docker_volume:/volume_mount
      options: --cpus 1
    steps:
      - name: Check for dockerenv file
        run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)
Wenn du nur ein Containerimage angibst, kannst du das image-Schlüsselwort weglassen.
jobs:
  container-test-job:
    runs-on: ubuntu-latest
    container: node:18
Definieren des Containerimages
Verwende jobs.<job_id>.container.image, um das Docker-Image zu definieren, das beim Ausführen der Aktion als Container herangezogen wird. Der Wert kann der Name des Docker Hub-Images oder ein Registrierungsname sein.
Definieren der Anmeldeinformationen für eine Containerregistrierung
Wenn die Containerregistrierung des Images eine Authentifizierung benötigt, damit das Image gepullt werden kann, kannst du mit jobs.<job_id>.container.credentials eine map von username und password festlegen. Die Anmeldeinformationen sind dieselben Werte, die du für den docker login-Befehl angeben würdest.
Beispiel: Definieren der Anmeldeinformationen für eine Containerregistrierung
container:
  image: ghcr.io/owner/image
  credentials:
     username: ${{ github.actor }}
     password: ${{ secrets.github_token }}
Verwenden von Umgebungsvariablen mit einem Container
Verwende jobs.<job_id>.container.env, um eine map von Umgebungsvariablen im Dienstcontainer einzustellen.
Offenlegen von Netzwerkports auf einem Container
Verwende jobs.<job_id>.container.ports zum Festlegen eines array aus Ports, die für den Container verfügbar gemacht werden sollen.
Einbinden von Volumes in einem Container
Verwende jobs.<job_id>.container.volumes zum Festlegen eines array von Volumes, die der Container verwenden soll. Mithilfe von Volumes kannst Du Daten zwischen Diensten oder anderen Schritten in einem Job austauschen. Du kannst benannte Docker-Volumes, anonyme Docker-Volumes oder Bind-Mounts auf dem Host angegeben.
Um ein Volume festzulegen, gibst du den Quell- und Zielpfad an:
<source>:<destinationPath>.
<source> ist ein Volumename oder ein absoluter Pfad auf dem Hostcomputer, und <destinationPath> ist ein absoluter Pfad im Container.
Beispiel: Einbinden von Volumes in einem Container
volumes:
  - my_docker_volume:/volume_mount
  - /data/my_data
  - /source/directory:/destination/directory
Festlegen von Containerressourcenoptionen
Verwende jobs.<job_id>.container.options zum Konfigurieren zusätzlicher Optionen für Docker-Containerressourcen. Eine Liste der Optionen findest du unter docker create-Optionen.
Warning
Die Optionen --network und --entrypoint werden nicht unterstützt.