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.