Mapeamento de portas do Host Docker e contêiner de serviço


Se o job for executado em um contêiner Docker, não é preciso mapear portas no host ou no contêiner de serviço. No entanto, se o job for executado diretamente na máquina do runner, será necessário mapear as portas necessárias do contêiner de serviço para as portas no host do runner.

É possível mapear as portas dos contêineres de serviço para o host Docker usando a palavra-chave “ports”.

Exemplo:

O exemplo a seguir mapeia a porta 6379 do contêiner de serviço "redis" para a porta 6379 do host Docker.

name: Exemplo de Serviço Redis
on: push
 
jobs:
  # Rótulo do _job_ em contêiner
  _runner_-job:
    # Você deve usar um ambiente Linux ao usar contêineres de serviço ou trabalhos em contêiner
    runs-on: ubuntu-latest
 
    # Contêineres de serviço para executar com `_runner_-job`
    services:
      # Rótulo usado para acessar o contêiner de serviço
      redis:
        # Imagem Docker Hub
        image: redis
        #
        ports:
          # Abre a porta TCP 6379 no host e no contêiner de serviço
          - 6379:6379

Quando você mapeia portas usando a palavra-chave “ports”, o GitHub utiliza o comando “—publish” para publicar as portas do contêiner no host Docker.

Documentação: Docker container networking

Se você especificar a porta do host Docker, mas não a porta do contêiner, a porta do contêiner será atribuída aleatoriamente a uma porta livre. O 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ê configurar a porta do host Docker como 5432, poderá acessar a porta correspondente do contêiner usando o contexto "job.services.redis.ports[5432]".

Documentação: Contexts.

Referências