{"meta":{"title":"Выполнение заданий в контейнере","intro":"Используйте контейнер для выполнения шагов задания.","product":"GitHub Actions","breadcrumbs":[{"href":"/ru/actions","title":"GitHub Actions"},{"href":"/ru/actions/how-tos","title":"Инструкции"},{"href":"/ru/actions/how-tos/write-workflows","title":"Написание рабочих процессов"},{"href":"/ru/actions/how-tos/write-workflows/choose-where-workflows-run","title":"Выбор места выполнения рабочих процессов"},{"href":"/ru/actions/how-tos/write-workflows/choose-where-workflows-run/run-jobs-in-a-container","title":"Выполнение заданий в контейнере"}],"documentType":"article"},"body":"# Выполнение заданий в контейнере\n\nИспользуйте контейнер для выполнения шагов задания.\n\n## Обзор\n\nИспользуйте `jobs.<job_id>.container` для создания контейнера для выполнения всех этапов задания, для которых еще не указан контейнер. При наличии этапов, которые используют действия скрипта и контейнера, действия контейнера будут выполняться как одноуровневые контейнеры в той же сети с теми же подключениями томов.\n\nЕсли `container` не задан, все этапы будут выполняться непосредственно на узле, указанном, `runs-on`, если только этап не относится к действию, настроенному на выполнение в контейнере.\n\n> \\[!NOTE]\n> Оболочка по умолчанию для `run` шагов внутри контейнера `sh` вместо `bash`. Это значение может быть изменено на [`jobs.<job_id>.defaults.run`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_iddefaultsrun) или [`jobs.<job_id>.steps[*].shell`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsshell).\n\n### Пример. Выполнение задания в контейнере\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\nПри указании только образа контейнера можно опустить ключевое слово `image`.\n\n```yaml\njobs:\n  container-test-job:\n    runs-on: ubuntu-latest\n    container: node:18\n```\n\n### Инструкции и переопределения Dockerfile\n\nDockerfile содержит инструкции и аргументы, определяющие содержимое и поведение запуска контейнера Docker. Дополнительные сведения об инструкциях, поддерживаемых Docker, см [. в справочнике](https://docs.docker.com/engine/reference/builder/) по Dockerfile в документации по Docker.\n\nНекоторые инструкции Docker взаимодействуют, GitHub Actionsи файл метаданных действия может переопределить некоторые инструкции Docker. Убедитесь, что вы знакомы с тем, как dockerfile взаимодействует с GitHub Actions таким образом, чтобы предотвратить непредвиденное поведение.\n\nСправочные сведения см. в разделе [Поддержка Dockerfile для GitHub Actions](/ru/actions/reference/workflows-and-actions/dockerfile-support).\n\n## Определение образа контейнера\n\nИспользуйте `jobs.<job_id>.container.image` для определения образа Docker, который будет использоваться в качестве контейнера для выполнения действия. Значением может быть имя образа Docker Hub или имя реестра.\n\n> \\[!NOTE]\n> Docker Hub обычно накладывает ограничения скорости для операций отправки и извлечения, которые повлияют на задания на локальных запусках. Однако GitHub, размещенные в runner, не подлежат этим ограничениям на основе соглашения между переменными данных.product.github %} и Docker.\n\n## Определение учетных данных для реестра контейнеров\n\nЕсли реестру контейнеров образа требуется проверка подлинности для извлечения образа, можно использовать `jobs.<job_id>.container.credentials`, чтобы настроить `map` для `username` и `password`. Учетные данные являются теми же значениями, которые будут предоставлены команде [`docker login`](https://docs.docker.com/engine/reference/commandline/login/).\n\n### Пример: определение учетных данных для реестра контейнеров\n\n```yaml\ncontainer:\n  image: ghcr.io/owner/image\n  credentials:\n     username: ${{ github.actor }}\n     password: ${{ secrets.github_token }}\n```\n\n## Использование переменных среды с контейнером\n\nИспользуйте `jobs.<job_id>.container.env` для задания `map` переменных среды в контейнере.\n\n## Предоставление сетевых портов в контейнере\n\nИспользуйте `jobs.<job_id>.container.ports` для задания `array` портов для использования в контейнере.\n\n## Подключение томов в контейнере\n\nИспользуйте `jobs.<job_id>.container.volumes` для задания `array` томов, которые будет использовать контейнер. Тома можно использовать для совместного использования данных между службами или другими этапами в задании. Можно указать именованные тома Docker, анонимные тома Docker или подключения привязок на узле.\n\nЧтобы указать том, укажите путь к источнику и назначению:\n\n`<source>:<destinationPath>`.\n\n`<source>` — это имя тома или абсолютный путь на хост-компьютере, а `<destinationPath>` — это абсолютный путь в контейнере.\n\n### Пример. Подключение томов в контейнере\n\n```yaml\nvolumes:\n  - my_docker_volume:/volume_mount\n  - /data/my_data\n  - /source/directory:/destination/directory\n```\n\n## Настройка параметров ресурса контейнера\n\nИспользуйте `jobs.<job_id>.container.options` для настройки дополнительных параметров ресурса контейнера Docker. Список параметров см. в разделе [`docker create` параметров](https://docs.docker.com/engine/reference/commandline/create/#options).\n\n> \\[!WARNING]\n> Параметры `--network` и `--entrypoint` параметры не поддерживаются."}