Eu tenho um diretório apkmirror-scraper-compose
com a seguinte estrutura:
.
├── docker-compose.yml
├── privoxy
│ ├── config
│ └── Dockerfile
├── scraper
│ ├── Dockerfile
│ ├── newnym.py
│ └── requirements.txt
└── tor
└── Dockerfile
Estou tentando executar o seguinte docker-compose.yml
:
version: '3'
services:
privoxy:
build: ./privoxy
ports:
- "8118:8118"
links:
- tor
tor:
build:
context: ./tor
args:
password: ""
ports:
- "9050:9050"
- "9051:9051"
scraper:
build: ./scraper
links:
- tor
- privoxy
onde o Dockerfile
para tor
é
FROM alpine:latest
EXPOSE 9050 9051
ARG password
RUN apk --update add tor
RUN echo "ControlPort 9051" >> /etc/tor/torrc
RUN echo "HashedControlPassword $(tor --quiet --hash-password $password)" >> /etc/tor/torrc
CMD ["tor"]
isso para privoxy
é
FROM alpine:latest
EXPOSE 8118
RUN apk --update add privoxy
COPY config /etc/privoxy/config
CMD ["privoxy", "--no-daemon"]
onde config
consiste nas duas linhas
listen-address 0.0.0.0:8118
forward-socks5 / tor:9050 .
e o Dockerfile
for scraper
é
FROM python:2.7-alpine
ADD . /scraper
WORKDIR /scraper
RUN pip install -r requirements.txt
CMD ["python", "newnym.py"]
onde requirements.txt
contém a única linha requests
. Finalmente, o programa newnym.py
foi projetado para simplesmente testar se a alteração do endereço IP usando o Tor está funcionando:
from time import sleep, time
import requests as req
import telnetlib
def get_ip():
IPECHO_ENDPOINT = 'http://ipecho.net/plain'
HTTP_PROXY = 'http://privoxy:8118'
return req.get(IPECHO_ENDPOINT, proxies={'http': HTTP_PROXY}).text
def request_ip_change():
tn = telnetlib.Telnet('tor', 9051)
tn.read_until("Escape character is '^]'.", 2)
tn.write('AUTHENTICATE ""\r\n')
tn.read_until("250 OK", 2)
tn.write("signal NEWNYM\r\n")
tn.read_until("250 OK", 2)
tn.write("quit\r\n")
tn.close()
if __name__ == '__main__':
dts = []
try:
while True:
ip = get_ip()
t0 = time()
request_ip_change()
while True:
new_ip = get_ip()
if new_ip == ip:
sleep(1)
else:
break
dt = time() - t0
dts.append(dt)
print("{} -> {} in ~{}s".format(ip, new_ip, int(dt)))
except KeyboardInterrupt:
print("Stopping...")
print("Average: {}".format(sum(dts) / len(dts)))
As docker-compose build
compilações foram bem-sucedidas, mas se eu tentar docker-compose up
, recebo a seguinte mensagem de erro:
Creating network "apkmirrorscrapercompose_default" with the default driver
ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
Tentei procurar ajuda nessa mensagem de erro, mas não consegui encontrar nenhuma. O que está causando esse erro?
python
docker
docker-compose
Kurt Peek
fonte
fonte
docker ps
não mostra nenhum contêiner em execução.docker network ls
confirmar se as redes já foram criadas no seu host.docker network prune
. Isso resolverá o seu problemaRespostas:
Vi que o docker sugerido pode estar no máximo de redes criadas. O comando
docker network prune
pode ser usado para remover todas as redes não usadas por pelo menos um contêiner.Meu problema acabou sendo, como Robert comentou sobre: um problema com o openvpn
service openvpn stop
'resolveu' o problema.fonte
Docker system prune
também pode ser uma correção, mas tenha cuidado, isso pode remover seu banco de dados, use-o apenas se você não se importar com ele, ou se seu contêiner de banco de dados estiver em execução, esse comando é seguro, pois remove as coisas que não estão sendo usadas por pelo menos um recipiente.Eu encontrei esse problema porque tinha o OpenVPN em execução. Assim que eu matei o OpenVPN, liguei
docker-compose up
e o erro desapareceu.fonte
redirect-gateway def1
de contornar o problema sem matar meu serviço openvpn.Corri neste problema com o OpenVPN funcionando também e encontrei uma solução em que você NÃO deve parar / iniciar o servidor OpenVPN.
Idéia de que você deve especificar exatamente qual sub-rede deseja usar. Na
docker-compose.yml
gravação:É isso aí. Agora, a
default
rede será usada e, se sua VPN não lhe atribuir algo da172.16.57.*
sub - rede, você estará bem.fonte
172.16.*.*
sub172.177.57.*
é uma boa ideia, porque não está nos en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses . Use endereços dentro desse intervalo.Após Peter Hauge 's comentário , após correr
docker network ls
Eu vi (entre outras linhas) o seguinte:A linha com
NAME
eDRIVER
como amboshost
parece ser o que ele está se referindo com "redes já criadas em seu host". Portanto, seguindo https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 , executei o comandoAgora
docker-compose up
funciona (emboranewnym.py
produza um erro).fonte
default
)docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')
eu entroError response from daemon: bridge is a pre-defined network and cannot be removed
no UbuntuDocker version 19.03.9, build 9d988398e7
docker-compose version 1.25.0, build unknown
Eu tenho o mesmo problema. Eu corri
docker system prune -a --volumes
,docker network prune
mas nem me ajudou.Eu uso uma VPN, desliguei a VPN e, depois que o docker começou normal e foi possível criar uma rede. Depois disso, você pode ativar a VPN novamente.
fonte
Como outras respostas mencionadas, a
bridge
rede local padrão do Docker suporta apenas 30 redes diferentes (cada uma delas identificável exclusivamente pelo nome). Se você não os estiver usando, entãodocker network prune
fará o truque.No entanto, você pode estar interessado em estabelecer mais de 30 contêineres, cada um com sua própria rede. Você estava interessado em fazer isso e precisaria definir uma
overlay
rede. Isso é um pouco mais complicado, mas extremamente bem documentado aqui .EDIT (maio de 2020): o link ficou indisponível, passando pelos documentos que não há uma substituição exata, mas eu recomendo começar a partir daqui .
fonte
Eu tive um problema idêntico com a mesma mensagem de erro, mas a solução com a remoção de redes docker não utilizadas não me ajudou. Excluí todas as redes docker não padrão (e todas as imagens e contêineres), mas isso não ajudou - o docker ainda não conseguiu criar uma nova rede.
A causa do problema estava nas interfaces de rede que foram deixadas após a instalação do OpenVpn. (Ele foi instalado no host anteriormente.) Encontrei-os executando o
ifconfig
comando:Descobri que posso removê-los com alguns comandos:
Depois disso, o problema desapareceu.
fonte
docker-compose down
Se a VPN estiver conectada, desconecte-a e tente novamente o container docker:
fonte
docker-compose down
corrigi para mimPodes tentar
Trabalhou para mim.
fonte
Eu encontrei o mesmo problema, o motivo é que você atingiu o máximo de redes:
faça um:
docker network ls
Escolha um para remover usando:docker network rm networkname_default
fonte
TL; DR
Adicionar
Leia sobre
network_mode
na documentação .Versão longa
aviso Legal : não tenho muito conhecimento sobre a rede do Docker, mas isso fez o truque para mim. YMMV.
Quando executei
docker run my-image
a rede, não tive problemas, mas quando converti esse comando em umdocker-compose.yml
arquivo, recebi o mesmo erro do OP.Li a resposta de Arenim e algumas outras coisas na internet que sugeriam reutilizar uma rede existente.
Você pode encontrar redes existentes como esta:
Eu queria reutilizar a
bridge
rede padrão , então adicioneipara a raiz do meu
docker-compose.yml
(então não dentro de um dos meusservices
, mas no recuo da raiz).Agora recebi o seguinte erro:
Isso levou a esse problema do Docker Github , que dizia claramente que eu deveria adicionar o
network_mode
objeto ao meudocker-compose
:Eu estava usando a versão do Docker
18.09.8
, adocker-compose
versão1.24.1
e o formato do arquivo de composição3.7
.fonte
Isso aconteceu comigo porque eu estava usando
OpenVPN
. Encontrei uma maneira de não precisar parar de usar a VPN ou adicionar manualmente uma rede ao arquivo de composição do docker nem executar nenhum script maluco.Eu mudei para em
WireGuard
vez deOpenVPN
. Mais especificamente, como estou executando a solução nordvpn, instalei o WireGuard e usei sua versão, NordLynx.fonte
nordvpn set technology NordLynx
. Não é um produto separado e atualmente está disponível apenas no Linux e iOS.Matar o vpn não é necessário.
Esse outro comentário sobre o uso de uma nova rede chega bem perto da solução para mim e estava funcionando por um tempo, mas achei uma maneira melhor graças a algumas conversas em outra pergunta
Crie uma rede com:
Em seguida, na parte inferior do docker-compose.yaml, coloque o seguinte:
Feito. Não há necessidade de adicionar redes a todas as definições de contêineres etc., e você pode reutilizar a rede com outros arquivos de composição do docker, se desejar.
fonte
Se você deseja muitas redes, pode controlar a quantidade de docker de espaço IP distribuída para cada rede por meio da
default-address-pools
configuração do deamon, para poder adicionar isso ao seu/etc/docker/daemon.json
:Aqui eu reservei
10.254.1.1/24
(254 endereços IP) para a rede da ponte.Para qualquer outra rede que eu criar, o docker particionará o
10.254.0.0
espaço (65k hosts), distribuindo 16 hosts por vez ("size":28
refere-se à máscara CIDR , para 16 hosts).Se eu criar algumas redes e depois executá
docker network inspect <name>
-las, pode ser algo como isto:Os
10.254.0.32/28
meios que esta rede pode usar 16 endereços IP de10.254.0.32
-10.254.0.47
.fonte
Eu tive o mesmo problema
Criando "schemaregistry1_default" da rede com o driver padrão
ERRO: não foi possível encontrar um pool de endereços IPv4 disponível e não sobreposto entre os padrões a serem atribuídos à rede
e nada ajudou até eu desligar a VPN da Cisco. depois que docker-compor funcionou
fonte
Corrigi esse problema por etapas:
desligue sua rede (sem fio ou com fio ...).
reinicie o seu sistema.
antes de ligar sua rede no PC, execute o comando docker-compondo, ele criará uma nova rede.
então você pode ativar a rede e continuar ...
fonte