Publicamos atualizações frequentes em nossa documentação, e a tradução desta página ainda pode estar em andamento. Para obter as informações mais recentes, acesse a documentação em inglês. Se houver problemas com a tradução desta página, entre em contato conosco.

Sobre os contêineres de serviço

Você pode usar contêineres de serviço para conectar bancos de dados, serviços web, memória cache e outras ferramentas ao seu fluxo de trabalho.

GitHub Actions está disponível com GitHub Free, GitHub Pro, GitHub Free para organizações, GitHub Team, GitHub Enterprise Cloud e GitHub One. GitHub Actions não está disponível para repositórios privados pertencentes a contas usando os planos de legado por repositório. Para obter mais informações, consulte "produtos de GitHub

Neste artigo

Sobre os contêineres de serviço

Os contêineres de serviço são contêineres Docker que fornecem uma forma simples e portátil para os seus serviços de hospedagem que você pode precisar testar ou operar a sua aplicação em um fluxo de trabalho. Por exemplo, o seu fluxo de trabalho pode precisar executar testes de integração que necessitem de acesso a um banco de dados e a uma memória cache.

Você pode configurar os contêineres de serviço para cada trabalho em um fluxo de trabalho. GitHub cria um novo contêiner Docker para cada serviço configurado no fluxo de trabalho e destrói o contêiner de serviço quando o trabalho é concluído. As etapas em um trabalho podem comunicar-se com todos os contêineres de serviço que fazem parte do mesmo trabalho.

Nota: se seus fluxos de trabalho usam ações do contêiner Docker ou recipientes de serviço, você deve usar um executor Linux:

  • Se você estiver usando executores hospedados em GitHub, você deverá usar um executor do Ubuntu.
  • Se você estiver usando executores auto-hospedados, você deve usar uma máquina Linux, pois seu executor e o Docker precisam ser instalados.

Comunicar-se com os contêineres de serviço

Você pode configurar trabalhos em um fluxo de trabalho para ser executados diretamente em uma máquina executora ou em um contêiner Docker. A comunicação entre o trabalho e seus contêineres de serviço é diferente, dependendo se um trabalho é executado diretamente na máquina executora ou em um contêiner.

Executar trabalhos em um contêiner

Ao executar trabalhos em um contêiner, GitHub conecta os contêineres de serviço ao trabalho suando as redes de ponte definidas pelo usuário do Docker. Para obter mais informações, consulte ""Usar redes de ponte" na documentação do Docker.

Executar o trabalho e os serviços em um contêiner simplifica o acesso à rede. Você pode acessar um contêiner de serviço usando a etiqueta que você configurar no fluxo de trabalho. O nome de host do contêiner do serviço é mapeado automaticamente de acordo com o nome da etiqueta. Por exemplo, se você criar um contêiner de serviço com a etiqueta redis, o nome de host do contêiner de serviço será redis.

Você não precisa configurar nenhuma porta para os contêineres de serviço. Por padrão, todos os contêineres que fazem parte da mesma rede do Docker expõem todas as portas entre si e nenhuma porta é exposta fora da rede do Docker.

Executar trabalhos na máquina executora

Ao executar trabalhos diretamente na máquina executora, você poderá acessar os contêineres de serviço usando localhost:<port> ou 127.0.0.1:<port>. GitHub configura a rede do contêiner para habilitar a comunicação a partir do contêiner de serviço com o host do Docker.

Quando um trabalho é executado diretamente em uma máquina executora, o serviço executado no contêiner do Docker não expõe suas portas ao trabalho no executor por padrão. Você deve mapear as portas no contêiner de serviço com o host do Docker. Para obter mais informações, consulte "Mapeando o host do Docker e as portas do contêiner de serviço".

Criar contêineres de serviço

Você pode usar a palavra-chave serviços para criar contêineres de serviço que fazem parte de um trabalho no seu fluxo de trabalho. Para obter mais informações, consulte trabalhos.<job_id>.serviços.

Este exemplo cria um serviço denominado redis em um trabalho denominado container-job. O host do Docker, neste exemplo, é o contêiner node:10.18-jessie.

nome: Exemplo de contêiner Redis
em: push

trabalhos:
  # Etiqueta do trabalho do contêiner
  container-job:
    # Os contêineres devem ser executados em sistemas operacionais baseados no Linux
    runs-on: ubuntu-latest
    # Imagem do Docker Hub em que o `container-job` é executado
    container: node:10.18-jessie

    # Contêineres de serviço a serem executados com `container-job`
    serviços:
      # Etiqueta usada para acessar o contêiner de serviço
      redis:
        # Imagem do Docker Hub
        imagem: redis

Mapear o host do Docker e as portas do contêiner de serviço

Se o seu trabalho for executado em um contêiner do Docker, você não precisará mapear as portas no host ou no contêiner de serviço. Se o seu trabalho for executado diretamente na máquina executora, você precisará mapear todas as portas do contêiner de serviço necessárias com as portas na máquina executora do host.

Você pode mapear as portas dos contêineres de serviço com o host do Docker usando a palavra-chave portas. Para obter mais informações, consulte trabalhos.<job_id>.serviços.

Valor das portasDescrição
8080:80Mapeia a porta 80 TCP no contêiner com a porta 8080 no host do Docker.
8080:80/udpMapeia a porta 80 UDP no contêiner com a porta 8080 no host do Docker.
8080/udpMapeia a porta UDP escolhida aleatoriamente no contêiner com a porta 8080 UDP no host do Docker.

Ao mapear portas usando a palavra-chave portas, GitHubusa o comando --publicar para publicar as portas do contêiner no host do Docker. Para obter mais informações, consulte "Rede do contêiner do Docker" na documentação do Docker.

Ao especificar a porta do host do Docker mas não a porta do contêiner, a porta do contêiner será atribuída aleatoriamente a uma porta livre. GitHub define a porta do contêiner atribuída no contexto do contêiner de serviço. Por exemplo, para um contêiner de serviço redis, se você configurou a porta 5432 do host do Docker, você poderá acessar a porta do contêiner correspondente usando o contexto job.services.redis.ports[5432]. Para obter mais informações, consulte "Contexto e sintaxe de expressão para GitHub Actions".

Exemplo de mapeamento de portas Redis

Este exemplo mapeia a porta 6379 do contêiner de serviço redis com a porta 6379 do host do Docker.

nome: Exemplo de serviço Redis
em: push

trabalhos:
  # Etiqueta do trabalho do contêiner
  runner-job:
    # YoVocê deve usar um ambiente Linux ao usar os contêineres de serviço ou os trabalhos do contêiner
    runs-on: ubuntu-latest

    # Contêineres de serviço a ser executados com `runner-job`
    serviços:
      # Etiqueta usada para acessar o contêiner de serviço
      redis:
        # Imagem do Docker Hubm
        image: redis
        #
        portas:
          # Abre a porta 6379 tcp no host e no contêiner de serviço
          - 6379:6379

Leia mais

Esse documento ajudou você?

Privacy policy

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.