Configurando o Docker para não usar o intervalo 172.17.0.0

Devido a problemas com portais cativos e o intervalo de IP do Docker padrão, estou tentando fazer o Docker usar o intervalo 198.18.0.0, em vez de 172.17.0.0, que entra em conflito com os portais cativos usados nos trens onde moro.

Seguinte documento, Eu criei /etc/docker/daemon.json, e coloque o seguinte nele:

{    "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 compose, a primeira rede criada é 172.17.0.0, que recria o clash.

O que posso fazer para alterar a sub-rede padrão para todo redes docker (de preferência sem ter que declarar meu intervalo de IP personalizado em cada arquivo de composição)?

É possível redefinir o intervalo padrão.

$ docker -vDocker version 18.06.0-ce, build 0ffa825

Editar ou criar arquivo de configuração para docker daemon:

# nano /etc/docker/daemon.json

Adicionar linhas:

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

Reiniciar dockerd:

# service docker restart

Verifique o resultado:

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

Ele também funciona para docker-compose. Mais informações aqui https://github.com/moby/moby/pull/29376 (mesclar)

Existem três lugares onde o docker gerará sub-redes de rede.

  • A ponte padrão
  • Redes de Ponte geradas pelo Usuário
  • Redes de sobreposição geradas pelo modo Swarm

Para a ponte padrão( chamada "ponte"), você pode especificar Bip (acredito que seja o IP da Ponte; certifique-se de que é um IP host, não um IP de rede) no daemon.json arquivo. E para redes de Ponte geradas pelo usuário, você pode definir um pool de sub-redes para escolher (supondo que o Usuário não especifique manualmente uma sub-rede). Para esses dois, seu /etc/docker/daemon.json pareceria:

{  "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 pool de endereços acima define um intervalo CIDR e o tamanho das sub-redes a serem alocadas desse 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 pools 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 só modificará 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 pelo modo swarm. Isso só pode ser feito no momento da criação do enxame agora, espero que seja atualizado no futuro para permitir docker swarm update para ajustar esses pools:

$ 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

Eu uso Docker Desktop em um Janela sistema operacional e tentei alterar o IP de ponte padrão.

Docker lança um erro e me pediu para redefinir as configurações toda vez que eu tentava mudar apenas o bip nas Configurações.

Isso funcionou :( tem que mergulhar fundo e entender como funciona)

{  "bip": "192.168.1.5/24",   "fixed-cidr": "192.168.1.5/25",   "default-address-pools":[      { "base":"192.168.2.5/24", "size":28 }  ]}

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

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

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