Migrating to the Container registry from the Docker registry

If you've used the GitHub Packages Docker registry to store Docker images, you can migrate your images to the new Container registry.

GitHub Package Registry is available with GitHub Free, GitHub Pro, GitHub Free for organizations, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server, and GitHub AE.


O GitHub Package Registry não está disponível para repositórios privados de contas que utilizam planos antigos por-repositório. Also, accounts using legacy per-repository plans cannot access the Container registry since these accounts are billed by repository. Para obter mais informações, consulte "[produtos de GitHub](/articles/github-s-products)

Key differences between the Container registry and the Docker registry

The Container registry supersedes the existing GitHub Package Registry Docker registry and is optimized to support some of the unique needs of containers.

With the Container registry you can:

  • Armazenar imagens de contêiner na sua conta de organização e usuário, em vez de um repositório.
  • Set granular permissions and visibility independently of repository permissions and visibility.
  • Acessar imagens de contêineres públicos anonimamente.
Docker registryContainer registry
Locais de hospedagemYou can host multiple Docker images in one repository.Você pode hospedar várias imagens de contêiner em uma organização ou conta de usuário.
PermissõesEach image inherits the permissions of the repository where the image is hosted. Anyone with read permissions for a repository can install a package as a dependency in a project, and anyone with write permissions can publish a new package version.Para cada imagem de container, você pode escolher o nível de acesso que os outros têm. As permissões para acesso a imagens do contêiner são separadas da sua organização e das permissões do repositório.
VisibilityYou can publish packages in a public repository (public packages) to share with all of GitHub, or in a private repository (private packages) to share with collaborators or an organization.You can set the visibility of each of your container images. Uma imagem privada de contêiner só é visível para pessoas e equipes às quais é fornecido acesso na sua organização. Qualquer pessoa pode ver uma imagem pública de contêiner.

Alterações de cobrança

During the Container registry beta, both the new Container registry and the existing GitHub Package Registry Docker registry are free of charge. For more information about the GitHub Package Registry Docker registry, see "Working with the Docker registry."

After the beta, the same billing and storage rates that other GitHub Package Registry registries use will apply to the Container registry. Para obter mais informações, consulte "Sobre a cobrança para GitHub Package Registry".

Alterações de domínio

O domínio para o Container registry é ghcr.io.

RegistroExemplo de URL
Registro Docker de GitHub Package Registrydocker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME
Container registryghcr.io/OWNER/IMAGE_NAME

Efetuar a autenticação no Container registry

Você deverá efetuar a autenticação no Container registry com a URL de base ghcr.io. Recomendamos criar um novo token de acesso para usar o Container registry.

Os PATs podem conceder amplo acesso à sua conta. You should select only the necessary read:packages, write:packages, or delete:packages scope when creating a PAT to authenticate to the Container registry.

To authenticate to the Container registry within a GitHub Actions workflow, use the GITHUB_TOKEN for the best security and experience.

For guidance on updating your workflows that authenticate to ghcr.io with a personal access token, see "Upgrading a workflow that accesses ghcr.io."

Se você desejar usar o Container registry em ações durante a versão beta, siga nossas práticas de segurança recomendadas para o uso do PAT emFortalecimento da segurança para o GitHub Actions".

  1. Crie um novo token de acesso pessoal (PAT) com os escopos apropriados para as tarefas que você deseja realizar. Se sua organização exigir SSO, você deverá habilitar o SSO para seu novo token.

    Note: By default, when you select the write:packages scope for your personal access token (PAT) in the user interface, the repo scope will also be selected. The repo scope offers unnecessary and broad access, which we recommend you avoid using for GitHub Actions workflows in particular. For more information, see "Security hardening for GitHub Actions." As a workaround, you can select just the write:packages scope for your PAT in the user interface with this url: https://github.com/settings/tokens/new?scopes=write:packages.

    • Selecione o escopo read:packages para fazer o download de imagens de contêineres e ler seus metadados.
    • Selecione o escopo write:packages para fazer o download e o upload de imagens de contêiner e ler e escrever seus metadados.
    • Selecione o escopo delete:packages para excluir imagens de contêineres.

    Para obter mais informações, consulte "Criar um token de acesso pessoal para a linha de comando".

  2. Salve seu PAT. Recomendamos salvar o seu PAT como uma variável de ambiente.

    $ export CR_PAT=YOUR_TOKEN
  3. Ao usar a CLI para seu tipo de container, faça login em serviço de Container registry em ghcr.io.

    $ echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
      > Login Succeeded

Fazer a migração de uma imagem do Docker usando a CLI do Docker

Para mover imagens do Docker que você hospeda no registro do Docker do GitHub Package Registry, você deve republicar as imagens para Container registry. Recomendamos republicar as imagens do Docker existentes usando a linha de comando na sua máquina local.

  1. Faça o login no registro do Docker usando um PAT temporário com pelo menos o escopo de read:packages. Este PAT só será usado para fazer o login no registro do Docker para puxar imagens e poderá ser excluído posteriormente.

    $ echo $READ_PACKAGES_TOKEN | docker login docker.pkg.github.com -u USERNAME --password-stdin
  2. Puxe para baixo a imagem que você gostaria de migrar, substituindo o PROPRIETÁRIO pelo nome do usuário ou conta de organização proprietária do repositório, REPOSITÓRIO pelo nome do repositório que contém seu projeto, IMAGE_NAME pelo o nome do pacote ou imagem, VERSÃO pela tag para a imagem que você deseja instalar. Por exemplo, docker pull docker.pkg.github.com/octo-org/octoshift/octoshift:latest move a tag mais recente da imagem octoshift/octoshift na organização octo-org.

    $ docker pull docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
  3. Remarque a imagem com o novo domínio e um novo nome de imagem. Para obter mais informações, consulte "Tag do Docker" na documentação Docker. Use a mesma URL que você usou na etapa anterior para a URL FONTE. Substitua TARGET_OWNER pelo usuário ou organização para o qual você está migrando a imagem do contêiner e substitua TARGET_IMAGE_NAME pelo novo nome de imagem de Container registry.

    $ docker tag docker.pkg.github.com/SOURCE_OWNER/SOURCE_REPOSITORY/SOURCE_IMAGE_NAME:VERSION ghcr.io/TARGET_OWNER/TARGET_IMAGE_NAME:VERSION
  4. Faça login no novo Container registry. Recomendamos criar um novo PAT limitado aos escopos read:packages e write: packages já que você não precisa mais do escopo repositório e seu PAT anterior pode não ter o escopo write:packages.

    $ echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
  5. Faça push da sua imagem re-etiquetada para o Container registry.

    $ docker push ghcr.io/OWNER/IMAGE_NAME:VERSION

Atualizar o seu fluxo de trabalho de GitHub Actions

Se tiver um fluxo de trabalho de GitHub Actions que usa uma imagem do Docker do registro Docker do GitHub Package Registry, você deverá atualizar seu fluxo de trabalho para Container registry para permitir acesso anônimo para imagens públicas de contêiner, permissões de acesso refinado e melhor compatibilidade de armazenamento e largura de banda para contêineres.

  1. Migre as suas imagens do Docker para o novo Container registry em ghcr.io. Por exemplo, consulte "Migrar uma imagem do Docker usando a CLI do Docker".

  2. No seu arquivo de fluxo de trabalho do GitHub Actions, atualize a URL do pacote de https://docker.pkg.github.com para ghcr.io.

  3. Use the GITHUB_TOKEN for your authentication personal access token (PAT). Para obter mais informações, consulte "Autenticação em um fluxo de trabalho".

  4. In your GitHub Actions workflow file, use the authentication token ${{ secrets.GITHUB_TOKEN }} as your Container registry PAT.

Exemplo de fluxo de trabalho atualizado

Se parte de seu fluxo de trabalho acessou uma imagem do Docker hospedada pelo registro Docker dessa forma:

echo ${{ secrets.GITHUB_TOKEN }} | docker login https://docker.pkg.github.com -u $GITHUB_ACTOR --password-stdin
docker pull docker.pkg.github.com/github/octoshift/octoshift:latest
docker build . --tag docker.pkg.github.com/github/octoshift/octoshift:$GITHUB_SHA --cache-from docker.pkg.github.com/github/octoshift/octoshift:latest
docker push docker.pkg.github.com/github/octoshift/octoshift:$GITHUB_SHA

Then you'll need to update your workflow with the new Container registry URL like this:

# new login with new container registry url and PAT
echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin
# new container registry urls added
docker pull ghcr.io/github/octoshift:latest
docker build . --tag ghcr.io/github/octoshift:$GITHUB_SHA --cache-from ghcr.io/github/octoshift:latest
docker push ghcr.io/github/octoshift:$GITHUB_SHA

Esse documento ajudou você?Política de Privacidade

Ajude-nos a tornar esses documentos ótimos!

Todos os documentos do GitHub são de código aberto. Você percebeu que algo que está errado ou não está claro? Envie um pull request.

Faça uma contribuição

Ou, aprenda como contribuir.