331 votes

Docker "ERREUR: impossible de trouver un pool d'adresses IPv4 disponible et ne se chevauchant pas parmi les valeurs par défaut à affecter au réseau"

J'ai un répertoire apkmirror-scraper-compose avec la structure suivante:

.
├── docker-compose.yml
├── privoxy
│   ├── config
│   └── Dockerfile
├── scraper
│   ├── Dockerfile
│   ├── newnym.py
│   └── requirements.txt
└── tor
    └── Dockerfile

Je suis en train de lancer le suivant 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

où l' Dockerfile pour tor est

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"]

que pour privoxy est

FROM alpine:latest
EXPOSE 8118
RUN apk --update add privoxy
COPY config /etc/privoxy/config
CMD ["privoxy", "--no-daemon"]

config se compose de deux lignes

listen-address 0.0.0.0:8118
forward-socks5 / tor:9050 .

et l' Dockerfile pour scraper est

FROM python:2.7-alpine
ADD . /scraper
WORKDIR /scraper
RUN pip install -r requirements.txt
CMD ["python", "newnym.py"]

requirements.txt contient la ligne requests. Enfin, le programme d' newnym.py est conçu pour simplement tester si la modification de l'adresse IP en utilisant Tor fonctionne:

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)))

L' docker-compose build construit avec succès, mais si j'essaie docker-compose up, j'obtiens le message d'erreur suivant:

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

J'ai essayé de chercher de l'aide sur ce message d'erreur, mais ne pouvais pas trouver toutes. Quelle est la cause de cette erreur?

579voto

bbeecher Points 1431

Je l'ai vu suggérer que docker soit au maximum de ses réseaux créés. La commande docker network prune peut être utilisée pour supprimer tous les réseaux non utilisés par au moins un conteneur.

Mon problème a fini par être, comme Robert l'a commenté: un problème avec openvpn service openvpn stop 'résolu' le problème.

248voto

DrDamnit Points 1684

J'ai rencontré ce problème parce que j'avais OpenVPN en cours d'exécution. Dès que j'ai tué OpenVPN, docker-compose up déclenché et l'erreur a disparu.

72voto

Kurt Peek Points 8050

Suite à Peter Hauge's commentaire, lors de l'exécution docker network ls que j'ai vu (entre autres lignes) suivantes:

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

La ligne NAME et DRIVER comme host semble être ce qu'il entend par "réseaux déjà créé sur votre hôte". Donc, à la suite de https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430, j'ai exécuté la commande

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

Maintenant, docker-compose up fonctionne (même si newnym.py génère une erreur).

66voto

madjardi Points 475

J'ai le même problème. J'ai couru docker system prune -a --volumes , docker network prune , mais les deux ne m'ont pas aidé.
J'utilise un VPN, j'éteins le VPN et, après cela, le menu fixe a démarré normalement et il peut créer un réseau. Après tout, vous pouvez réactiver le VPN

10voto

  1. Vérifiez si un autre conteneur est en cours d'exécution. Si oui, procédez comme suit: docker-compose down
  2. Si un réseau privé virtuel est connecté, déconnectez-le et essayez à nouveau d'utiliser le conteneur de menu fixe:

     docker-compose up -d container_name
     

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X