Tengo un directorio apkmirror-scraper-compose
con la siguiente estructura:
.
├── docker-compose.yml
├── privoxy
│ ├── config
│ └── Dockerfile
├── scraper
│ ├── Dockerfile
│ ├── newnym.py
│ └── requirements.txt
└── tor
└── Dockerfile
Estoy tratando de ejecutar lo siguiente 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
donde el Dockerfile
de tor
es
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"]
eso para privoxy
es
FROM alpine:latest
EXPOSE 8118
RUN apk --update add privoxy
COPY config /etc/privoxy/config
CMD ["privoxy", "--no-daemon"]
donde config
consiste en las dos líneas
listen-address 0.0.0.0:8118
forward-socks5 / tor:9050 .
y el Dockerfile
para scraper
es
FROM python:2.7-alpine
ADD . /scraper
WORKDIR /scraper
RUN pip install -r requirements.txt
CMD ["python", "newnym.py"]
donde requirements.txt
contiene la única línea requests
. Finalmente, el programa newnym.py
está diseñado para simplemente probar si está funcionando el cambio de la dirección IP usando Tor:
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)))
Las docker-compose build
compilaciones se docker-compose up
realizan correctamente, pero si lo intento , aparece el siguiente mensaje de error:
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
Intenté buscar ayuda para este mensaje de error, pero no pude encontrar ninguna. Que esta causando este error?
python
docker
docker-compose
Kurt Peek
fuente
fuente
docker ps
no muestra ningún contenedor en ejecución.docker network ls
confirmar si las redes ya se crearon en su host?docker network prune
. Esto resolverá su problemaRespuestas:
He visto que sugiere que Docker puede estar en su máximo de redes creadas. El comando
docker network prune
se puede usar para eliminar todas las redes no utilizadas por al menos un contenedor.Mi problema terminó siendo, como Robert comentó: un problema con openvpn
service openvpn stop
'resolvió' el problema.fuente
Docker system prune
también puede ser una solución, pero tenga cuidado, esto puede eliminar su base de datos, solo use esto si no le importa su base de datos, o si su contenedor de base de datos se está ejecutando, este comando es seguro ya que solo elimina las cosas que no se usan por al menos un contenedor.Me encontré con este problema porque tenía OpenVPN ejecutándose. Tan pronto como maté a OpenVPN,
docker-compose up
disparé de inmediato y el error desapareció.fuente
redirect-gateway def1
evitar el problema sin matar mi servicio openvpn.Me encontré con este problema con OpenVPN funcionando también y encontré una solución donde NO debería detener / iniciar el servidor OpenVPN.
Idea de que debe especificar exactamente qué subred desea usar. En
docker-compose.yml
escritura:Eso es. Ahora,
default
se utilizará la red y si su VPN no le asignó algo de la172.16.57.*
subred, está bien.fuente
172.16.*.*
subred172.177.57.*
sea una buena idea, porque no está en en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses . Use direcciones dentro de este rango.Siguiendo el comentario de Peter Hauge , al correr vi (entre otras líneas) lo siguiente:
docker network ls
La línea con
NAME
yDRIVER
como amboshost
parece ser a lo que se refiere con "redes ya creadas en su host". Entonces, siguiendo https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 , ejecuté el comandoAhora
docker-compose up
funciona (aunquenewnym.py
produce un error).fuente
default
)docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')
me metoError response from daemon: bridge is a pre-defined network and cannot be removed
en Ubuntu 20.04Docker version 19.03.9, build 9d988398e7
docker-compose version 1.25.0, build unknown
Tengo el mismo problema. Corrí
docker system prune -a --volumes
,docker network prune
pero ninguno me ayudó.Utilizo una VPN, apagué la VPN y, después de que la ventana acoplable comenzó a funcionar normalmente, pude crear una red. Después de eso, puede habilitar VPN nuevamente.
fuente
Como se mencionó en otras respuestas, la
bridge
red local predeterminada de Docker solo admite 30 redes diferentes (cada una de ellas identificable de forma única por su nombre). Si no los está utilizando, entoncesdocker network prune
hará el truco.Sin embargo, puede estar interesado en establecer más de 30 contenedores, cada uno con su propia red. Si estaba interesado en hacerlo, necesitaría definir una
overlay
red. Esto es un poco más complicado pero extremadamente bien documentado aquí .EDITAR (mayo de 2020): el enlace no está disponible, revisando los documentos no hay un reemplazo exacto, pero recomendaría comenzar desde aquí .
fuente
Tuve un problema idéntico con el mismo mensaje de error, pero la solución con la eliminación de redes de acopladores no utilizadas no me ayudó. Eliminé todas las redes de acopladores no predeterminadas (y también todas las imágenes y contenedores), pero no sirvió de nada; el acoplador aún no pudo crear una nueva red.
La causa del problema estaba en las interfaces de red que quedaron después de la instalación de OpenVpn. (Se instaló en el host anteriormente). Los encontré ejecutando el
ifconfig
comando:Descubrí que puedo eliminarlos con un par de comandos:
Después de esto, el problema ha desaparecido.
fuente
docker-compose down
Si la VPN está conectada, desconéctela e intente nuevamente subir el contenedor acoplable:
fuente
docker-compose down
arreglé para míPuedes probar
Trabajó para mi.
fuente
Me encontré con el mismo problema, la razón es que llegaste al máximo de redes:
hacer un:
docker network ls
Elija uno para eliminar usando:docker network rm networkname_default
fuente
TL; DR
Añadir
Lea sobre
network_mode
en la documentación .Versión larga
Descargo de responsabilidad : no estoy muy bien informado sobre las redes de Docker, pero esto fue el truco para mí. YMMV.
Cuando ejecuté
docker run my-image
la red, no tuve problemas, pero cuando convertí este comando en undocker-compose.yml
archivo, recibí el mismo error que el OP.Leí la respuesta de Arenim y algunas otras cosas en Internet que sugerían reutilizar una red existente.
Puede encontrar redes existentes como esta:
Quería reutilizar la
bridge
red predeterminada , así que agreguéa la raíz de mi
docker-compose.yml
(así que no dentro de una de miservices
, sino en la sangría de la raíz).Ahora recibí el siguiente error:
Esto llevó a este problema de Docker Github , que decía claramente que debería agregar el
network_mode
objeto a midocker-compose
:Estaba usando la versión Docker
18.09.8
, ladocker-compose
versión1.24.1
y el formato de archivo de composición3.7
.fuente
Esto me sucedió porque estaba usando
OpenVPN
. Encontré una forma en que no necesito dejar de usar la VPN o agregar manualmente una red al archivo docker-compose ni ejecutar ningún script loco.Me cambié a en
WireGuard
lugar deOpenVPN
. Más específicamente, como estoy ejecutando la solución nordvpn, instalé WireGuard y usé su versión, NordLynx.fuente
nordvpn set technology NordLynx
. No es un producto separado, y actualmente solo está disponible en Linux e iOS.No es necesario matar el VPN.
Este otro comentario sobre el uso de una nueva red se acerca bastante a la solución para mí y estuvo funcionando durante un tiempo, pero encontré una mejor manera gracias a algunas conversaciones en otra pregunta.
Crea una red con:
Luego, en la parte inferior de docker-compose.yaml, ponga esto:
Hecho. No es necesario agregar redes a todas las definiciones de contenedor, etc. y también puede reutilizar la red con otros archivos compuestos por docker si lo desea.
fuente
Si desea muchas redes, puede controlar la cantidad de espacio IP que la
default-address-pools
ventana acoplable distribuye a cada red a través de la configuración de deamon, para que pueda agregar esto a su/etc/docker/daemon.json
:Aquí he reservado
10.254.1.1/24
(254 direcciones IP) para la red del puente.Para cualquier otra red que creo, Docker dividirá el
10.254.0.0
espacio (65k hosts), dando 16 hosts a la vez (se"size":28
refiere a la máscara CIDR , para 16 hosts).Si creo algunas redes y luego las ejecuto
docker network inspect <name>
, podría mostrar algo como esto:Esto
10.254.0.32/28
significa que esta red puede usar 16 direcciones IP de10.254.0.32
-10.254.0.47
.fuente
Tuve el mismo problema
Crear la red "schemaregistry1_default" con el controlador predeterminado
ERROR: no se pudo encontrar un grupo de direcciones IPv4 no superpuesto disponible entre los valores predeterminados para asignar a la red
y nada ayudó hasta que apagué la VPN de Cisco. después de que Docker-componer funcionó
fuente
Solucioné este problema por pasos:
apague su red (inalámbrica o por cable ...).
reinicie su sistema.
antes de encender su red en la PC, ejecute el comando docker-compose, creará una nueva red.
entonces puede encender la red y continuar ...
fuente