Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы может все еще выполняться. Актуальные сведения см. в документации на английском языке.

Перестроение контейнера в codespace

Вы можете перестроить контейнер, чтобы применить изменения конфигурации к пространствам кода, в которых вы работаете. Время от времени может потребоваться выполнить полное перестроение.

Сведения о перестроении контейнера

При работе в codespace среда разработки представляет собой контейнер Docker, который выполняется на виртуальной машине. Если вы вносите изменения в конфигурацию контейнера разработки из codespace и хотите применить эти изменения к текущему codespace, необходимо перестроить контейнер.

По умолчанию при перестроении контейнера GitHub Codespaces ускорит процесс сборки, повторно используя кэшированные образы из предыдущих сборок контейнера. Обычно это самый быстрый способ реализации изменений в конфигурации контейнера разработки по следующим причинам.

  • GitHub Codespaces может повторно использовать образы в кэше, а не удалять их из реестров контейнеров.
  • Части конфигурации контейнера разработки, определяющие способ сборки контейнера, такие как функции контейнера разработки и инструкции Dockerfile, возможно, уже реализованы на уровнях образов в кэше, поэтому вам не придется ждать повторного запуска этих процессов. (Однако команды в конфигурации, которые выполняются после сборки контейнера, например onCreateCommand, будут выполняться снова.)

Иногда может потребоваться выполнить полную перестройку контейнера. При полном перестроении GitHub Codespaces очищает все контейнеры, образы и тома Docker из кэша, а затем перестраивает контейнер с новыми извлеченными образами. Вся настройка, определенная в конфигурации, будет выполняться снова, создавая новые слои образов. Вам может потребоваться выполнить полное перестроение после многих итераций перестроения контейнера с кэшируемыми образами в таких ситуациях, как показано ниже.

  • Необходимо убедиться, что настройка, определенная в конфигурации, не зависит от кэшированных образов и будет выполняться по мере необходимости, когда кто-то создает новое пространство кода на основе конфигурации. Например, зависимость могла быть удалена из базового образа с момента последнего извлечения в codespace.
  • Вы хотите освободить место на диске, используемое кэшем, например, если у вас мало места на диске или вы хотите свести к минимуму расходы на хранилище. Кэш образа может использовать значительный объем дискового пространства, если вы несколько раз меняли базовый образ, вносили большое количество итеративных изменений в конфигурацию или используете несколько контейнеров с Docker Compose.

Перестроение контейнера

Вы можете перестроить контейнер в codespace в веб-клиенте или классическом приложении VS Code или использовать GitHub CLI.

Перестроение контейнера разработки в веб-клиенте или классическом приложении VS Code

  1. Получите доступ к VS Code Command Palette спомощью команды+ SHIFT+P (Mac) или CTRL+SHIFT+P (Windows/Linux).

  2. Начните вводить "Перестроение" и выберите Codespaces: Перестроение контейнера или Codespaces: Полный контейнер перестроения.

    Снимок экрана: параметр Codespaces: полный контейнер перестроения в палитре команд.

  3. Если изменения в конфигурации контейнера разработки приводят к ошибке контейнера, codespace запустится в режиме восстановления и появится сообщение об ошибке.

    Снимок экрана: сообщение о том, что codespace выполняется в режиме восстановления. Под сообщением находятся кнопки "Отмена" и "Просмотр журнала создания".

    • Диагностируйте проблему путем просмотра журналов создания. Для этого нажмите кнопку Просмотр журнала создания.
    • Чтобы устранить ошибки, выявленные в журналах, обновите файл devcontainer.json.
    • Чтобы применить изменения, перестройте контейнер.

Использование GitHub CLI для перестроения контейнера разработки

Если вы изменили конфигурацию контейнера разработки за пределами VS Code (например, в GitHub.com или в интегрированной среде разработки JetBrains), вы можете использовать GitHub CLI для перестроения контейнера разработки для существующего пространства кода.

  1. В окне терминала введите следующую команду.

    gh codespace rebuild
    

    В списке указаны ваши codespace.

  2. Используйте клавиши со стрелками на клавиатуре, чтобы выделить необходимое пространство кода, а затем нажмите клавишу ВВОД.

Чтобы выполнить полное перестроение с GitHub CLI, можно использовать gh codespace rebuild --full команду .

Сохранение данных при перестроении

При создании codespace репозиторий клонируется в /workspaces каталог в codespace. Это постоянный каталог, подключенный к контейнеру. Любые изменения, внесенные в этот каталог, включая редактирование, добавление или удаление файлов, сохраняются при остановке и запуске codespace, а также при перестроении контейнера в codespace.

За пределами /workspaces каталога codespace содержит структуру каталогов Linux, которая зависит от образа, используемого для сборки codespace. Вы можете добавлять файлы или вносить изменения в файлы за пределами /workspaces каталога. Например, можно установить новые программы или настроить конфигурацию оболочки в файле, ~/.bashrcнапример . Как пользователь, не являющийся корневым, вы можете не иметь автоматический доступ на запись в определенные каталоги, но большинство образов разрешают корневой доступ к этим каталогам с помощью sudo команды .

Вне /workspaces, за исключением /tmp каталога, каталоги в codespace привязаны к жизненному циклу контейнера. Это означает, что все внесенные изменения сохраняются при остановке и запуске codespace, но не сохраняются при перестроении контейнера.

Если вы хотите сохранить файлы за пределами /workspaces каталога при перестроении, можно создать в нужном расположении в контейнере символьную ссылку (символьную ссылку) на постоянный каталог. Например, в каталоге /workspaces/.devcontainer можно создать каталог config, который будет сохранен при перестроении. Затем вы можете связать символьной ссылкой каталог config и его содержимое как postCreateCommand в файле devcontainer.json.

{
    "image": "mcr.microsoft.com/vscode/devcontainers/base:alpine",
    "postCreateCommand": ".devcontainer/postCreate.sh"
}

В приведенном ниже примере файла postCreate.sh содержимое каталога config связано символической ссылкой с домашним каталогом.

#!/bin/bash
ln -sf $PWD/.devcontainer/config $HOME/config && set +x

Дополнительные материалы