Docker "FEHLER: Es konnte kein verfügbarer, nicht überlappender IPv4-Adresspool unter den Standardeinstellungen gefunden werden, die dem Netzwerk zugewiesen werden sollen."

153

Ich habe ein Verzeichnis apkmirror-scraper-composemit folgender Struktur:

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

Ich versuche Folgendes auszuführen 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

wo das Dockerfilefür torist

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

das für privoxyist

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

wo configbesteht aus den beiden Zeilen

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

und das Dockerfilefür scraperist

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

wo requirements.txtenthält die einzelne Zeile requests. Schließlich soll das Programm newnym.pyeinfach testen, ob das Ändern der IP-Adresse mit Tor funktioniert:

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

Das docker-compose buildBuilds erfolgreich, aber wenn ich es versuche docker-compose up, erhalte ich die folgende Fehlermeldung:

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

Ich habe versucht, in dieser Fehlermeldung nach Hilfe zu suchen, konnte aber keine finden. Was verursacht diesen Fehler?

Kurt Peek
quelle
1
Nein, es docker pswerden keine Container ausgeführt.
Kurt Peek
77
Haben Sie ein VPN verbunden? Haben Sie auch versucht, Ihren Computer neu zu starten? (Ich google) github.com/moby/moby/issues/30295
Robert
3
Können Sie versuchen zu docker network lsbestätigen, ob auf Ihrem Host bereits Netzwerke erstellt wurden?
Peter Hauge
1
Danke @Robert Ich hatte PIA VPN ausgeführt, sobald ich die Verbindung getrennt und beendet hatte, funktionierte es.
xx1xx
15
docker network prune. Dies wird Ihr Problem lösen
Jinna Balu

Antworten:

274

Ich habe gesehen, dass Docker möglicherweise maximal maximal erstellte Netzwerke hat. Mit dem Befehl docker network prunekönnen alle Netzwerke entfernt werden, die nicht von mindestens einem Container verwendet werden.

Mein Problem war, wie Robert kommentierte: Ein Problem mit openvpn hat service openvpn stopdas Problem "gelöst".

bbeecher
quelle
10
Wenn Sie Docker neben VPN ausführen müssen, ist hier eine mögliche Lösung: stackoverflow.com/q/45692255/7918 .
jb.
45
OpenVPN Service war das Problem für mich.
Liviu Ilea
Um die obige Antwort zu ergänzen, kann das System wirklich helfen, wenn Sie ein Problem wie dieses beschneiden. Docker system prunekann auch ein Fix sein, aber bitte seien Sie vorsichtig, dies kann Ihre Datenbank entfernen. Verwenden Sie diese Option nur, wenn Sie sich nicht für Ihre Datenbank interessieren oder wenn Ihr DB-Container ausgeführt wird. Dieser Befehl ist sicher, da er nur Dinge verwendet, die nicht verwendet werden um mindestens einen Behälter.
Sweet Chilly Philly
Vielen Dank. Ich bestätige, dass das Stoppen des openvpn-Clients funktioniert. Ich hatte es vor ein paar Tagen gestartet, dann habe ich heute das Docker-Compose ausgeführt und diesen Fehler erhalten.
Dat TT
1
Stellen Sie sich ein Leben vor, in dem unsere Tools nützliche Debugging-Informationen liefern.
Damien Roche
156

Ich bin auf dieses Problem gestoßen, weil OpenVPN ausgeführt wurde. Sobald ich OpenVPN getötet habe, wurde es sofort gestartet docker-compose upund der Fehler verschwand.

DrDamnit
quelle
9
Gleiches gilt hier für einen anderen VPN-Anbieter (expressvpn).
berkes
1
Das gleiche Problem mit OpenVPN
Nicolai
6
Ich hatte also das gleiche Problem und frage mich, warum dies geschieht. Warum wird das Docker-Netzwerk verwirrt, wenn eine Verbindung zu einem VPN besteht?
David Ficociello
2
Ich hatte das gleiche Problem mit privatem Internetzugang
Nicolas
1
Ich habe Routen hinzugefügt, anstatt redirect-gateway def1das Problem zu umgehen, ohne meinen openvpn-Dienst zu beenden.
Douglas Liu
57

Ich habe dieses Problem mit OpenVPN ausgeführt und eine Lösung gefunden, bei der Sie den OpenVPN-Server NICHT stoppen / starten sollten.

Idee, dass Sie genau angeben sollten, welches Subnetz Sie verwenden möchten. In docker-compose.ymlschreiben:

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

Das ist es. Jetzt wird das defaultNetzwerk verwendet und wenn Ihr VPN Ihnen nichts aus dem 172.16.57.*Subnetz zugewiesen hat , ist alles in Ordnung.

Arenim
quelle
2
Das ist toll! Meine Server-Box kann ohne OpenVPN nicht stehen, daher sind Ratschläge zum (auch vorübergehenden) Deaktivieren von VPN für mich Unsinn.
iBug
4
Dies sollte die akzeptierte Antwort sein, da es dumm ist, einfach VPN zu töten
michnovka
Ist 172.177.57.0/24 nicht ein gerouteter Newtork? In diesem Fall kann es zu Problemen bei der Kontaktaufnahme mit einer begrenzten Anzahl von Hosts im Internet kommen.
Dstromberg
1
Ja, eine Panne hier. Wäre besser, eine aus dem 172.16.*.*Subnetz zu verwenden
Arenim
Ich halte die Verwendung nicht für 172.177.57.*eine gute Idee, da sie nicht in den en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses enthalten ist . Verwenden Sie Adressen innerhalb dieses Bereichs.
Lucidyan
53

Im Anschluss an Peter Hauge ‚s Kommentar , auf Laufen docker network lssah ich (unter anderen Linien) wie folgt zusammen :

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

Die Linie mit NAMEund DRIVERals beides hostscheint das zu sein, worauf er sich mit "bereits auf Ihrem Host erstellten Netzwerken" bezieht. Unter https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 habe ich den Befehl ausgeführt

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

Funktioniert jetzt docker-compose up(obwohl newnym.pyein Fehler auftritt).

Kurt Peek
quelle
8
Funktioniert nicht in neueren Docker-Versionen - das Entfernen integrierter Netzwerke (z. B. default) ist nicht
zulässig
Wenn Sie Traefik verwenden, müssen Sie diesen Container herunterfahren, bevor Sie diesen Befehl ausführen. Andernfalls wird angenommen, dass alle Ihre Netzwerke aktiv sind.
Allure Web Solutions
Wenn ich docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')Error response from daemon: bridge is a pre-defined network and cannot be removedDocker version 19.03.9, build 9d988398e7 docker-compose version 1.25.0, build unknown
renne, komme
47

Ich habe das gleiche Problem. Ich rannte docker system prune -a --volumes, docker network pruneaber keiner half mir.

Ich benutze ein VPN, habe das VPN ausgeschaltet und nachdem der Docker normal gestartet war und ein Netzwerk erstellen konnte. Danach können Sie VPN wieder aktivieren.

Madjardi
quelle
3
Meine VPN-Verbindung befand sich im selben Subnetz wie der Docker. Das Trennen der Verbindung löste das Problem für mich. :)
XtraSimplicity
1
ahhhVPN lief.
Adiii
25

Wie bereits erwähnt, unterstützt das lokale Standardnetzwerk von Docker bridgenur 30 verschiedene Netzwerke (von denen jedes anhand seines Namens eindeutig identifizierbar ist). Wenn Sie sie nicht verwenden, docker network prunewird der Trick ausgeführt.

Möglicherweise möchten Sie jedoch mehr als 30 Container mit jeweils eigenem Netzwerk einrichten. Wären Sie daran interessiert, müssten Sie ein overlayNetzwerk definieren . Dies ist ein wenig komplizierter , aber extrem gut dokumentiert hier .

BEARBEITEN (Mai 2020): Der Link ist nicht mehr verfügbar. In den Dokumenten gibt es keinen genauen Ersatz, aber ich würde empfehlen, von hier aus zu beginnen .

Carlos Segarra
quelle
Ihr
Link
@chovy danke, dass du mich informiert hast, sie haben ihre Dokumente neu organisiert. Jetzt aktualisieren.
Carlos Segarra
13

Ich hatte ein identisches Problem mit derselben Fehlermeldung, aber die Lösung mit dem Entfernen nicht verwendeter Docker-Netzwerke hat mir nicht geholfen. Ich habe alle nicht standardmäßigen Docker-Netzwerke (und auch alle Bilder und Container) gelöscht, aber es hat nicht geholfen - Docker konnte immer noch kein neues Netzwerk erstellen.

Die Ursache des Problems lag in Netzwerkschnittstellen, die nach der OpenVpn-Installation übrig blieben. (Es wurde zuvor auf dem Host installiert.) Ich habe sie gefunden, indem ich den folgenden ifconfigBefehl ausgeführt habe:

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

Ich habe festgestellt, dass ich sie mit ein paar Befehlen entfernen kann:

ip link delete tun0
ip link delete tun1

Danach ist das Problem verschwunden.

Rara
quelle
Dies funktionierte für mich, nachdem ich verschiedene Optionen ausprobiert hatte - OpenVPN gestoppt, PC neu gestartet, Docker neu installiert, Netzwerkbereinigung usw.
Matt
10
  1. Überprüfen Sie, ob ein anderer Container ausgeführt wird. Wenn ja, gehen Sie wie folgt vor: docker-compose down
  2. Wenn VPN verbunden ist, trennen Sie es und versuchen Sie erneut, den Docker-Container zu aktualisieren:

    docker-compose up -d container_name
Nandini Chaurasiya
quelle
Ich habe kein VPN ausgeführt, aber docker-compose downes für mich behoben
IMB
8

Du kannst es versuchen

$sudo service network-manager restart

Hat für mich gearbeitet.

Ivan Mishur
quelle
Hat auch für mich gearbeitet!
mmrs151
7

Ich bin auf dasselbe Problem gestoßen. Der Grund dafür ist, dass Sie das Maximum an Netzwerken erreicht haben:

do an: docker network ls Wählen Sie eine aus, die entfernt werden soll, indem Sie:docker network rm networkname_default

Amine Benkeroum
quelle
6

Das ist mir passiert, weil ich es benutzt habe OpenVPN. Ich habe einen Weg gefunden, wie ich nicht aufhören muss, das VPN zu verwenden oder der Docker-Compose-Datei manuell ein Netzwerk hinzuzufügen oder ein verrücktes Skript auszuführen.

Ich wechselte zu WireGuardstatt OpenVPN. Während ich die nordvpn-Lösung ausführe, habe ich WireGuard installiert und deren Version NordLynx verwendet.

ehzicamesmo
quelle
Der spezifische Befehl zum Wechseln von OpenVPN zum WireGuard-Protokoll für NordVPN lautet nordvpn set technology NordLynx. Es ist kein separates Produkt und derzeit nur unter Linux und iOS verfügbar.
Tephyr
6

Das Töten des VPN ist nicht erforderlich.

Dieser andere Kommentar zur Verwendung eines neuen Netzwerks kommt der Lösung für mich ziemlich nahe und hat eine Weile funktioniert, aber ich habe dank einiger Gespräche in einer anderen Frage einen besseren Weg gefunden

Erstellen Sie ein Netzwerk mit:

docker network create your-network --subnet 172.24.24.0/24

Fügen Sie dann am Ende von docker-compose.yaml Folgendes ein:

networks:
  default:
    external: 
      name: your-network

Getan. Sie müssen nicht zu allen Containerdefinitionen usw. Netzwerke hinzufügen, und Sie können das Netzwerk auch mit anderen Docker-Compose-Dateien wiederverwenden, wenn Sie möchten.

Lotus
quelle
6

TL; DR

Hinzufügen

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

Lesen Sie mehr network_modein der Dokumentation .

Lange Version

Haftungsausschluss : Ich kenne mich mit Docker-Netzwerken nicht sehr gut aus, aber das hat mir geholfen. YMMV.

Als ich docker run my-imagedas Netzwerk ausführte, gab es keine Probleme, aber als ich diesen Befehl in eine docker-compose.ymlDatei konvertierte , bekam ich den gleichen Fehler wie beim OP.

Ich habe die Antwort von Arenim und einige andere Dinge im Internet gelesen , die vorgeschlagen haben, ein vorhandenes Netzwerk wiederzuverwenden.

Sie können vorhandene Netzwerke wie folgt finden:

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

Ich wollte das Standardnetzwerk wiederverwenden bridge, also fügte ich hinzu

services:
  web:
    ...

networks:
  default:
    external:
      name: bridge

an die Wurzel von mir docker-compose.yml(also nicht in eine von meinen services, sondern an die Wurzeleinkerbung).

Ich habe jetzt folgenden Fehler erhalten:

FEHLER: Für Ihren Container wird ein Alias ​​mit Netzwerkbereich nur für Container in benutzerdefinierten Netzwerken unterstützt

Dies führte zu diesem Docker Github-Problem , in dem eindeutig angegeben wurde, dass ich das network_modeObjekt zu meinem hinzufügen sollte docker-compose:

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

Ich habe Docker-Version 18.09.8, docker-composeVersion 1.24.1und das Compose-Dateiformat verwendet 3.7.

Stefan van den Akker
quelle
1
Ist das eine Frage oder eine Antwort?
Chovy
Mehr a: Meine Abenteuer im Docker-Netzwerk landen und wie ich auf etwas gestoßen bin, das stecken geblieben ist.
Stefan van den Akker
3

Wenn Sie viele Netzwerke möchten, können Sie über die default-address-poolsDeamon-Einstellung steuern, wie viel IP-Space-Docker an jedes Netzwerk verteilt, und Folgendes hinzufügen /etc/docker/daemon.json:

{
  "bip": "10.254.1.1/24",
  "default-address-pools":[{"base":"10.254.0.0/16","size":28}],
}

Hier habe ich 10.254.1.1/24(254 IP-Adressen) für das Brückennetz reserviert .

Für alle anderen Netzwerk - I erstellen, wird Docker die Partition 10.254.0.0Raum (65k Hosts), was aus 16 Hosts zu einem Zeitpunkt ( "size":28bezieht sich auf die CIDR - Maske , für 16 Hosts).

Wenn ich ein paar Netzwerke erstelle und sie dann ausführe docker network inspect <name>, wird möglicherweise Folgendes angezeigt:

        ...
        "Subnet": "10.254.0.32/28",
        "Gateway": "10.254.0.33"
        ...

Das 10.254.0.32/28bedeutet, dass dieses Netzwerk 16 IP-Adressen von 10.254.0.32- verwenden kann 10.254.0.47.

Matthew
quelle
0

Ich bin auf das gleiche Problem gestoßen

Erstellen des Netzwerks "schemaregistry1_default" mit dem Standardtreiber FEHLER
: Es konnte kein verfügbarer, nicht überlappender IPv4-Adresspool unter den Standardeinstellungen gefunden werden , die dem Netzwerk zugewiesen werden sollen

und nichts half, bis ich das Cisco VPN ausschaltete. danach funktionierte Docker-Compose

Вячеслав Калякин
quelle
-3

Ich habe dieses Problem schrittweise behoben:

  1. Schalten Sie Ihr Netzwerk aus (drahtlos oder verkabelt ...).

  2. Starten Sie Ihr System neu.

  3. Bevor Sie Ihr Netzwerk auf dem PC einschalten, führen Sie den Befehl docker-compose up aus. Dadurch wird ein neues Netzwerk erstellt.

  4. dann können Sie das Netzwerk einschalten und weitermachen ...

salim
quelle