whats start for compose python docker docker-compose

python - start - Docker "ERROR: no se pudo encontrar un grupo de direcciones IPv4 no superpuesto disponible entre los valores predeterminados para asignar a la red"



manual docker compose (12)

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 el 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 está el 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"]

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 consta de 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 las requests de una sola línea. 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)))

La docker-compose build compila correctamente, pero si intento docker-compose up , docker-compose up 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?


TL; DR

Añadir

version: "3.7" services: web: ... network_mode: "bridge"

Lea sobre network_mode en la documentación .

Versión larga

Descargo de responsabilidad : no conozco mucho las redes de Docker, por lo que la "solución" que funcionó para mí es como un encantamiento mágico y YMMV.

Cuando ejecuté docker run my-image la red no me dio problemas, pero cuando convertí este comando en un archivo docker-compose.yml , obtuve 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:

# docker network ls NETWORK ID NAME DRIVER SCOPE ca0415dfa442 bridge bridge local 78cbbda034dd host host local 709f13f4ce2d none null local

Quería reutilizar la red bridge predeterminada, así que agregué

services: web: ... networks: default: external: name: bridge

a la raíz de mi docker-compose.yml (por lo tanto, no dentro de uno de mis services , sino en la sangría de la raíz).

Ahora recibí el siguiente error:

ERROR: para el alias con alcance de red de su contenedor solo se admite para contenedores en redes definidas por el usuario

Esto llevó a este problema de Docker Github , que decía claramente que debería agregar el objeto network_mode a mi docker-compose :

version: "3.7" services: web: ... network_mode: "bridge"

Estaba usando Docker versión 18.09.8 , docker-compose versión 1.24.1 y el formato de archivo compose 3.7 .


  1. Compruebe si se está ejecutando algún otro contenedor. En caso afirmativo, haga: docker-compose down
  2. Si la VPN está conectada, desconéctela e intente nuevamente subir el contenedor acoplable:

    docker-compose up -d container_name


Como se mencionó en otras respuestas, la red de bridge 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, entonces docker network prune hará el truco.

Sin embargo, es posible que le interese establecer más de 30 contenedores, cada uno con su propia red. Si estaba interesado en hacerlo, necesitaría definir una red overlay . Esto es un poco más complicado pero extremadamente bien documentado here .


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 el service openvpn stop "resolver" el problema.


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


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 escribe:

networks: default: driver: bridge ipam: config: - subnet: 172.177.57.0/24

Eso es. Ahora, se usará la red default y si su VPN no le asignó algo desde 172.177.57.* Subred Está bien.


Me encontré con este problema porque tenía OpenVPN ejecutándose. Tan pronto como maté a OpenVPN, docker-compose up Docker se docker-compose up y el error desapareció.


Puedes probar

$sudo service network-manager restart

Trabajó para mi.


Siguiendo el comment Peter Hauge , al ejecutar la docker network ls vi (entre otras líneas) lo siguiente:

NETWORK ID NAME DRIVER SCOPE dc6a83d13f44 bridge bridge local ea98225c7754 docker_gwbridge bridge local 107dcd8aa889 host host local

La línea con NAME y DRIVER como host parece ser a lo que se refiere con "redes ya creadas en su host". Entonces, siguiendo https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 , ejecuté el comando

docker network rm $(docker network ls | grep "bridge" | awk ''/ / { print $1 }'')

Ahora docker-compose up funciona (aunque newnym.py produce un error).


Solucioné este problema por pasos:

  1. apague su red (inalámbrica o por cable ...).

  2. reinicie su sistema.

  3. antes de encender su red en la PC, ejecute el comando docker-compose up, creará una nueva red.

  4. entonces puedes encender la red y continuar ...


Tengo el mismo problema. docker system prune -a --volumes , docker network prune , pero ambas no me ayudaron.
Uso VPN, apago la VPN y, después de eso, Docker comenzó a funcionar normalmente y él puede crear una red. Después de todo, puede habilitar VPN nuevamente


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 comando ifconfig :

... tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.2 P-t-P:10.8.0.2 Mask:255.255.255.0 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:75 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:84304 (84.3 KB) TX bytes:0 (0.0 B) tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.2 P-t-P:10.8.0.2 Mask:255.255.255.0 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:200496 errors:0 dropped:0 overruns:0 frame:0 TX packets:148828 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:211583838 (211.5 MB) TX bytes:9568906 (9.5 MB) ...

Descubrí que puedo eliminarlos con un par de comandos:

ip link delete tun0 ip link delete tun1

Después de esto, el problema ha desaparecido.