Ich habe ein Verzeichnis apkmirror-scraper-compose
mit 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 Dockerfile
für tor
ist
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 privoxy
ist
FROM alpine:latest
EXPOSE 8118
RUN apk --update add privoxy
COPY config /etc/privoxy/config
CMD ["privoxy", "--no-daemon"]
wo config
besteht aus den beiden Zeilen
listen-address 0.0.0.0:8118
forward-socks5 / tor:9050 .
und das Dockerfile
für scraper
ist
FROM python:2.7-alpine
ADD . /scraper
WORKDIR /scraper
RUN pip install -r requirements.txt
CMD ["python", "newnym.py"]
wo requirements.txt
enthält die einzelne Zeile requests
. Schließlich soll das Programm newnym.py
einfach 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 build
Builds 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?
python
docker
docker-compose
Kurt Peek
quelle
quelle
docker ps
werden keine Container ausgeführt.docker network ls
bestätigen, ob auf Ihrem Host bereits Netzwerke erstellt wurden?docker network prune
. Dies wird Ihr Problem lösenAntworten:
Ich habe gesehen, dass Docker möglicherweise maximal maximal erstellte Netzwerke hat. Mit dem Befehl
docker network prune
kö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 stop
das Problem "gelöst".quelle
Docker system prune
kann 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.Ich bin auf dieses Problem gestoßen, weil OpenVPN ausgeführt wurde. Sobald ich OpenVPN getötet habe, wurde es sofort gestartet
docker-compose up
und der Fehler verschwand.quelle
redirect-gateway def1
das Problem zu umgehen, ohne meinen openvpn-Dienst zu beenden.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.yml
schreiben:Das ist es. Jetzt wird das
default
Netzwerk verwendet und wenn Ihr VPN Ihnen nichts aus dem172.16.57.*
Subnetz zugewiesen hat , ist alles in Ordnung.quelle
172.16.*.*
Subnetz zu verwenden172.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.Im Anschluss an Peter Hauge ‚s Kommentar , auf Laufen
docker network ls
sah ich (unter anderen Linien) wie folgt zusammen :Die Linie mit
NAME
undDRIVER
als beideshost
scheint 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ührtFunktioniert jetzt
docker-compose up
(obwohlnewnym.py
ein Fehler auftritt).quelle
default
) ist nichtdocker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')
Error response from daemon: bridge is a pre-defined network and cannot be removed
Docker version 19.03.9, build 9d988398e7
docker-compose version 1.25.0, build unknown
Ich habe das gleiche Problem. Ich rannte
docker system prune -a --volumes
,docker network prune
aber 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.
quelle
Wie bereits erwähnt, unterstützt das lokale Standardnetzwerk von Docker
bridge
nur 30 verschiedene Netzwerke (von denen jedes anhand seines Namens eindeutig identifizierbar ist). Wenn Sie sie nicht verwenden,docker network prune
wird 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
overlay
Netzwerk 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 .
quelle
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
ifconfig
Befehl ausgeführt habe:Ich habe festgestellt, dass ich sie mit ein paar Befehlen entfernen kann:
Danach ist das Problem verschwunden.
quelle
docker-compose down
Wenn VPN verbunden ist, trennen Sie es und versuchen Sie erneut, den Docker-Container zu aktualisieren:
quelle
docker-compose down
es für mich behobenDu kannst es versuchen
Hat für mich gearbeitet.
quelle
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
quelle
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
WireGuard
stattOpenVPN
. Während ich die nordvpn-Lösung ausführe, habe ich WireGuard installiert und deren Version NordLynx verwendet.quelle
nordvpn set technology NordLynx
. Es ist kein separates Produkt und derzeit nur unter Linux und iOS verfügbar.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:
Fügen Sie dann am Ende von docker-compose.yaml Folgendes ein:
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.
quelle
TL; DR
Hinzufügen
Lesen Sie mehr
network_mode
in 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-image
das Netzwerk ausführte, gab es keine Probleme, aber als ich diesen Befehl in einedocker-compose.yml
Datei 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:
Ich wollte das Standardnetzwerk wiederverwenden
bridge
, also fügte ich hinzuan die Wurzel von mir
docker-compose.yml
(also nicht in eine von meinenservices
, sondern an die Wurzeleinkerbung).Ich habe jetzt folgenden Fehler erhalten:
Dies führte zu diesem Docker Github-Problem , in dem eindeutig angegeben wurde, dass ich das
network_mode
Objekt zu meinem hinzufügen solltedocker-compose
:Ich habe Docker-Version
18.09.8
,docker-compose
Version1.24.1
und das Compose-Dateiformat verwendet3.7
.quelle
Wenn Sie viele Netzwerke möchten, können Sie über die
default-address-pools
Deamon-Einstellung steuern, wie viel IP-Space-Docker an jedes Netzwerk verteilt, und Folgendes hinzufügen/etc/docker/daemon.json
: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.0
Raum (65k Hosts), was aus 16 Hosts zu einem Zeitpunkt ("size":28
bezieht 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:Das
10.254.0.32/28
bedeutet, dass dieses Netzwerk 16 IP-Adressen von10.254.0.32
- verwenden kann10.254.0.47
.quelle
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
Ich habe dieses Problem schrittweise behoben:
Schalten Sie Ihr Netzwerk aus (drahtlos oder verkabelt ...).
Starten Sie Ihr System neu.
Bevor Sie Ihr Netzwerk auf dem PC einschalten, führen Sie den Befehl docker-compose up aus. Dadurch wird ein neues Netzwerk erstellt.
dann können Sie das Netzwerk einschalten und weitermachen ...
quelle