{"meta":{"title":"Exécution de travaux dans un conteneur","intro":"Utilisez un conteneur pour exécuter les étapes d’un travail.","product":"GitHub Actions","breadcrumbs":[{"href":"/fr/actions","title":"GitHub Actions"},{"href":"/fr/actions/how-tos","title":"Guides pratiques"},{"href":"/fr/actions/how-tos/write-workflows","title":"Écrire des workflows"},{"href":"/fr/actions/how-tos/write-workflows/choose-where-workflows-run","title":"Choisir où les workflows s’exécutent"},{"href":"/fr/actions/how-tos/write-workflows/choose-where-workflows-run/run-jobs-in-a-container","title":"Exécuter des travaux dans un conteneur"}],"documentType":"article"},"body":"# Exécution de travaux dans un conteneur\n\nUtilisez un conteneur pour exécuter les étapes d’un travail.\n\n## Vue d’ensemble\n\nUtilisez `jobs.<job_id>.container` pour créer un conteneur permettant d’exécuter les étapes d’un travail qui ne spécifient pas encore de conteneur. Si vous avez des étapes qui utilisent à la fois des actions de script et des actions de conteneur, les actions de conteneur s’exécutent en tant que conteneurs frères sur le même réseau avec les mêmes montages de volume.\n\nSi vous ne définissez pas de `container`, toutes les étapes s’exécutent directement sur l’hôte spécifié par `runs-on`, sauf si une étape fait référence à une action configurée pour s’exécuter dans un conteneur.\n\n> \\[!NOTE]\n> L’interpréteur de commandes par défaut pour les étapes `run` incluses dans un conteneur est `sh` plutôt que `bash`. Vous pouvez le remplacer par [`jobs.<job_id>.defaults.run`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_iddefaultsrun) ou [`jobs.<job_id>.steps[*].shell`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsshell).\n\n### Exemple : Exécution d’un travail dans un conteneur\n\n```yaml copy\nname: CI\non:\n  push:\n    branches: [ main ]\njobs:\n  container-test-job:\n    runs-on: ubuntu-latest\n    container:\n      image: node:18\n      env:\n        NODE_ENV: development\n      ports:\n        - 80\n      volumes:\n        - my_docker_volume:/volume_mount\n      options: --cpus 1\n    steps:\n      - name: Check for dockerenv file\n        run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)\n```\n\nQuand vous spécifiez uniquement une image conteneur, vous pouvez omettre le mot clé `image`.\n\n```yaml\njobs:\n  container-test-job:\n    runs-on: ubuntu-latest\n    container: node:18\n```\n\n### Instructions Dockerfile et remplacement des instructions\n\nUn Dockerfile contient des instructions et des arguments qui définissent le contenu et le comportement de démarrage d’un conteneur Docker. Pour plus d’informations sur les instructions que Docker prend en charge, consultez « [Dockerfile reference](https://docs.docker.com/engine/reference/builder/) » dans la documentation Docker.\n\nCertaines instructions Docker interagissent avec GitHub Actions, et le fichier de métadonnées d’une action peut remplacer certaines instructions Docker. Vérifiez que vous êtes familiarisé avec la façon dont votre fichier Dockerfile interagit avec GitHub Actions pour empêcher tout comportement inattendu.\n\nPour obtenir des informations de référence, consultez [Prise en charge de Dockerfile pour GitHub Actions](/fr/actions/reference/workflows-and-actions/dockerfile-support).\n\n## Définition de l’image conteneur\n\nUtilisez `jobs.<job_id>.container.image` pour définir l’image Docker à utiliser en tant que conteneur afin d’exécuter l’action. La valeur peut être le nom de l’image Docker Hub ou un nom de registre.\n\n> \\[!NOTE]\n> Docker Hub impose normalement des limites de débit sur les opérations d’envoi (push) et de tirage (pull), ce qui affectera les tâches sur les exécuteurs auto-hébergés. Toutefois, les exécuteurs hébergés par GitHub ne sont pas soumis à ces limites, conformément à un accord entre GitHub et Docker.\n\n## Définition des informations d’identification d’un registre de conteneurs\n\nSi le registre de conteneurs de l’image nécessite une authentification pour tirer l’image, vous pouvez utiliser `jobs.<job_id>.container.credentials` pour définir un `map` de `username` et de `password`. Les informations d’identification correspondent aux mêmes valeurs que celles que vous fournissez à la commande [`docker login`](https://docs.docker.com/engine/reference/commandline/login/).\n\n### Exemple : Définition des informations d’identification d’un registre de conteneurs\n\n```yaml\ncontainer:\n  image: ghcr.io/owner/image\n  credentials:\n     username: ${{ github.actor }}\n     password: ${{ secrets.github_token }}\n```\n\n## Utilisation de variables d’environnement avec un conteneur\n\nUtilisez `jobs.<job_id>.container.env` pour définir un `map` de variables d’environnement dans le conteneur.\n\n## Exposition de ports réseau sur un conteneur\n\nUtilisez `jobs.<job_id>.container.ports` pour définir un `array` de ports à exposer sur le conteneur.\n\n## Montage de volumes dans un conteneur\n\nUtilisez `jobs.<job_id>.container.volumes` pour définir un `array` de volumes à utiliser par le conteneur. Vous pouvez utiliser des volumes pour partager des données entre des services ou d’autres étapes d’un travail. Vous pouvez spécifier des volumes Docker nommés, des volumes Docker anonymes ou des montages de liaisons sur l’hôte.\n\nPour spécifier un volume, vous spécifiez le chemin source et le chemin de destination :\n\n`<source>:<destinationPath>`.\n\nLa valeur `<source>` est un nom de volume ou un chemin absolu sur la machine hôte et `<destinationPath>` est un chemin absolu dans le conteneur.\n\n### Exemple : Montage de volumes dans un conteneur\n\n```yaml\nvolumes:\n  - my_docker_volume:/volume_mount\n  - /data/my_data\n  - /source/directory:/destination/directory\n```\n\n## Définition des options de ressources de conteneur\n\nUtilisez `jobs.<job_id>.container.options` pour configurer des options supplémentaires de ressources de conteneur Docker. Pour obtenir la liste des options, consultez « [Options `docker create`](https://docs.docker.com/engine/reference/commandline/create/#options) ».\n\n> \\[!WARNING]\n> Les options `--network` et `--entrypoint` ne sont pas prises en charge."}