Configurando o Docker para não usar o intervalo 172.17.0.0


21

Devido a problemas com portais cativos e o intervalo IP padrão do Docker, estou tentando fazer com que o Docker use o intervalo 198.18.0.0, em vez do 172.17.0.0, que colide com os portais cativos usados ​​nos trens em que moro.

Após os documentos , criei /etc/docker/daemon.jsone coloquei o seguinte:

{
    "bip":"198.18.0.0/16"
}

Isso funcionou para o docker0, mas parece não ter afetado nenhuma das outras redes, e usando o docker compor a primeira rede criada é 172.17.0.0, que recria o confronto.

O que posso fazer para alterar a sub-rede padrão para todas as redes docker (de preferência sem precisar declarar meu intervalo de IP personalizado em todos os arquivos de composição)?

Respostas:


27

É possível redefinir o intervalo padrão.

$ docker -v
Docker version 18.06.0-ce, build 0ffa825

Edite ou crie um arquivo de configuração para o docker daemon:

# nano /etc/docker/daemon.json

Adicione linhas:

{
  "default-address-pools":
  [
    {"base":"10.10.0.0/16","size":24}
  ]
}

Reinicie o dockerd:

# service docker restart

Veja o resultado:

$ docker network create foo
$ docker network inspect foo | grep Subnet
                    "Subnet": "10.10.1.0/24"

Também funciona para o docker-compondo. Mais informações aqui https://github.com/moby/moby/pull/29376 (mesclado)


10.10.0.0/16 se sobrepõe às redes padrão globais. Você pode usar {"base": "192.168.0.0/16","size":24}. Por favor, veja github.com/moby/moby/blob/…
Root G

11

Existem três locais em que o docker irá gerar sub-redes de rede.

  • A ponte padrão
  • Redes de pontes geradas pelo usuário
  • Redes de sobreposição geradas no modo Swarm

Para a ponte padrão (chamada "ponte"), você pode especificar o BIP (acredito que seja o IP da ponte; verifique se é um IP do host, não um IP da rede ) no daemon.jsonarquivo. E para redes de pontes geradas pelo usuário, você pode definir um pool de sub-rede para escolher (supondo que o usuário não especifique manualmente uma sub-rede). Para esses dois, você /etc/docker/daemon.jsonficaria assim:

{
  "bip": "10.200.0.1/24",
  "default-address-pools":[
    {"base":"10.201.0.0/16","size":24},
    {"base":"10.202.0.0/16","size":24}
  ]
}

Cada configuração do conjunto de endereços acima define um intervalo CIDR e um tamanho de sub-redes a serem alocados nesse intervalo. Portanto, o acima define dois intervalos de classe B que são alocados como redes de classe C (/ 24). Você precisa de pelo menos 18.06 para os conjuntos de endereços padrão. Você precisará recarregar o daemon do docker para que essa alteração seja aplicada ( systemctl reload docker). E essa alteração modificará apenas as redes de usuários recém-criadas, portanto, você precisará interromper os contêineres e excluir as redes existentes no intervalo errado.


Em 18.09, o Docker adicionou a capacidade de especificar o intervalo de endereços para redes de sobreposição geradas no modo enxame. Isso só pode ser feito no momento da criação do enxame, espero que seja atualizado no futuro para permitir o docker swarm updateajuste desses conjuntos:

$ docker swarm init \
  --default-addr-pool 10.202.0.0/16 \
  --default-addr-pool 10.203.0.0/16 \
  --default-addr-pool-mask-length 24

11
Grande resumo das opções atuais 2018/2019. Além disso, se você estiver usando o Docker Desktop, a bipopção na GUI Configurações / Preferências. Para default-address-poolsvocê pode editar o daemon.json manualmente no mesmo GUI, e por enxame é default-addr-poolvocê ainda alterá-los com o initcomando.
Bret Fisher

1

Configure a rede de ponte padrão : "… Para configurar a rede de ponte padrão, especifique opções em daemon.json. Aqui está um exemplo daemon.json com várias opções especificadas. Especifique apenas as configurações que você precisa personalizar.…"

Com escrever: Especifique redes personalizadas : "… Em vez de usar apenas a rede de aplicativos padrão, você pode especificar suas próprias redes com a chave de redes de nível superior. Isso permite criar topologias mais complexas e especificar drivers e opções de rede personalizados. Você também pode use-o para conectar serviços a redes criadas externamente que não são gerenciadas pelo Compose.… "


É possível alterar o intervalo de IPs usado para redes implícitas usadas pelo docker-compose e aquelas que não têm o intervalo definido explicitamente?
jrtapsell

-1

Pode ser um pouco brutal, mas eu simplesmente faço sudo ifconfig docker0 downpara desligar a interface que entra em conflito com o wifi que estou tentando usar.


A questão é usar outro intervalo, não desativar a rede.
RalfFriedl

@RalfFriedl Isso é verdade. Mas como um viajante frequente que usa muitas redes wifi diferentes, vi todos os tipos de intervalos de portas em conflito. Portanto, em vez de procurar um intervalo de portas, também é possível desligar temporariamente a rede.
Falko Menge
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.