Mam katalog apkmirror-scraper-compose
o następującej strukturze:
.
├── docker-compose.yml
├── privoxy
│ ├── config
│ └── Dockerfile
├── scraper
│ ├── Dockerfile
│ ├── newnym.py
│ └── requirements.txt
└── tor
└── Dockerfile
Próbuję uruchomić następujące 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
gdzie jest Dockerfile
fortor
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"]
że privoxy
jest
FROM alpine:latest
EXPOSE 8118
RUN apk --update add privoxy
COPY config /etc/privoxy/config
CMD ["privoxy", "--no-daemon"]
gdzie config
składa się z dwóch linii
listen-address 0.0.0.0:8118
forward-socks5 / tor:9050 .
a Dockerfile
za scraper
jest
FROM python:2.7-alpine
ADD . /scraper
WORKDIR /scraper
RUN pip install -r requirements.txt
CMD ["python", "newnym.py"]
gdzie requirements.txt
zawiera pojedynczą linię requests
. Na koniec program newnym.py
został zaprojektowany tak, aby po prostu sprawdzić, czy zmiana adresu IP za pomocą Tora działa:
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)))
docker-compose build
Buduje pomyślnie, ale gdy próbuję docker-compose up
, pojawia się następujący komunikat o błędzie:
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
Próbowałem znaleźć pomoc dotyczącą tego komunikatu o błędzie, ale nie znalazłem żadnej. Co powoduje ten błąd?
python
docker
docker-compose
Kurt Peek
źródło
źródło
docker ps
pokazuje brak uruchomionych kontenerów.docker network ls
potwierdzić, czy sieci zostały już utworzone na Twoim hoście?docker network prune
. To rozwiąże Twój problemOdpowiedzi:
Widziałem, że sugeruje, że docker może mieć maksimum utworzonych sieci. Polecenia
docker network prune
można użyć do usunięcia wszystkich sieci, które nie są używane przez co najmniej jeden kontener.Mój problem zakończył się, jak skomentował Robert : problem z openvpn
service openvpn stop
„rozwiązał” problem.źródło
Docker system prune
może być również poprawką, ale bądź ostrożny, może to usunąć twoją bazę danych, używaj tego tylko jeśli nie dbasz o swoją bazę danych lub jeśli twój kontener DB jest uruchomiony, to polecenie jest bezpieczne, ponieważ usuwa tylko rzeczy, które nie są używane przez co najmniej jeden pojemnik.Napotkałem ten problem, ponieważ miałem uruchomiony OpenVPN. Jak tylko zabiłem OpenVPN,
docker-compose up
odpaliłem od razu, a błąd zniknął.źródło
redirect-gateway def1
obejść problem bez zabijania mojej usługi openvpn.Uruchomiłem ten problem z działającym OpenVPN i znalazłem rozwiązanie, w którym NIE powinieneś zatrzymywać / uruchamiać serwera OpenVPN.
Pomysł, który powinieneś określić dokładnie podsieć, której chcesz użyć. Na
docker-compose.yml
piśmie:Otóż to. Teraz
default
sieć będzie używana i jeśli Twoja sieć VPN nie przypisała Ci czegoś z172.16.57.*
podsieci, wszystko w porządku.źródło
172.16.*.*
podsieci172.177.57.*
było dobrym pomysłem, ponieważ nie ma go w en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses . Użyj adresów z tego zakresu.W następstwie Petera HAUGE dydaktycznego komentarz , na prowadzenie
docker network ls
widziałem (między innymi liniami) dodaje się:Linia z
NAME
iDRIVER
jako,host
że oba wydają się być tym, do czego odnosi się z „sieciami już utworzonymi na Twoim hoście”. Tak więc, podążając za https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 , uruchomiłem polecenieTeraz
docker-compose up
działa (chociażnewnym.py
powoduje błąd).źródło
default
docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')
to dostanę sięError response from daemon: bridge is a pre-defined network and cannot be removed
na Ubuntu 20.04Docker version 19.03.9, build 9d988398e7
docker-compose version 1.25.0, build unknown
Mam ten sam problem. Pobiegłem
docker system prune -a --volumes
,docker network prune
ale żadne mi nie pomogło.Używam VPN, wyłączyłem VPN i po tym, jak docker zaczął normalnie i był w stanie stworzyć sieć. Następnie możesz ponownie włączyć VPN.
źródło
Jak wspomniały inne odpowiedzi, domyślna
bridge
sieć lokalna Dockera obsługuje tylko 30 różnych sieci (każda z nich jest jednoznacznie identyfikowalna na podstawie nazwy). Jeśli ich nie używasz,docker network prune
załatwią sprawę.Możesz jednak być zainteresowany utworzeniem ponad 30 kontenerów, z których każdy ma własną sieć. Gdybyś był tym zainteresowany, musiałbyś zdefiniować
overlay
sieć. Jest to nieco trudniejsze, ale bardzo dobrze udokumentowane tutaj .EDYCJA (maj 2020 r.): Link stał się niedostępny, przeglądając dokumenty, nie ma dokładnego zamiennika, ale polecam zacząć od tego miejsca .
źródło
Miałem identyczny problem z tym samym komunikatem o błędzie, ale rozwiązanie polegające na usunięciu nieużywanych sieci dockerowych nie pomogło. Usunąłem wszystkie niedomyślne sieci Dockera (a także wszystkie obrazy i kontenery), ale to nie pomogło - docker nadal nie był w stanie utworzyć nowej sieci.
Przyczyną problemu były interfejsy sieciowe, które pozostały po instalacji OpenVpn. (Był wcześniej zainstalowany na hoście). Znalazłem je, uruchamiając
ifconfig
polecenie:Odkryłem, że mogę je usunąć za pomocą kilku poleceń:
Po tym problem zniknął.
źródło
docker-compose down
Jeśli VPN jest podłączony, odłącz go i spróbuj ponownie uruchomić kontener Docker:
źródło
docker-compose down
naprawiłem to za mnieMożesz spróbować
Pracował dla mnie.
źródło
Napotkałem ten sam problem, powodem jest to, że osiągnąłeś maksimum sieci:
wykonaj:
docker network ls
wybierz jedną do usunięcia za pomocą:docker network rm networkname_default
źródło
TL; DR
Dodaj
Przeczytaj o
network_mode
w dokumentacji .Długa wersja
Zastrzeżenie : nie mam zbyt dużej wiedzy na temat sieci Docker, ale to załatwiło sprawę. YMMV.
Kiedy uruchomiłem
docker run my-image
sieć, nie sprawiło mi to żadnych problemów, ale kiedy przekonwertowałem to polecenie nadocker-compose.yml
plik, otrzymałem ten sam błąd co OP.Przeczytałem odpowiedź Arenima i kilka innych rzeczy w Internecie, które sugerowały ponowne wykorzystanie istniejącej sieci.
Możesz znaleźć istniejące sieci, takie jak ta:
Chciałem ponownie użyć domyślnej
bridge
sieci, więc dodałemdo korzenia mojego
docker-compose.yml
(a więc nie wewnątrz jednego z moichservices
, ale w wcięciu w rdzeniu).Mam teraz następujący błąd:
Doprowadziło to do tego problemu Docker Github , który wyraźnie stwierdził, że powinienem dodać
network_mode
obiekt do mojegodocker-compose
:Używałem wersji Dockera
18.09.8
,docker-compose
wersji1.24.1
i formatu pliku redagowania3.7
.źródło
Przydarzyło mi się to, ponieważ używałem
OpenVPN
. Znalazłem sposób, w jaki nie muszę przerywać korzystania z VPN, ręcznie dodawać sieci do pliku docker-compose ani uruchamiać żadnego szalonego skryptu.Przerzuciłem się na
WireGuard
zamiastOpenVPN
. Mówiąc dokładniej, ponieważ korzystam z rozwiązania nordvpn, zainstalowałem WireGuard i użyłem jego wersji NordLynx.źródło
nordvpn set technology NordLynx
. Nie jest to osobny produkt i obecnie jest dostępny tylko na Linuksie i iOS.Zabijanie VPN nie jest potrzebne.
Ten inny komentarz dotyczący korzystania z nowej sieci jest dla mnie dość bliski rozwiązaniu i działał przez jakiś czas, ale znalazłem lepszy sposób dzięki omówieniu w innym pytaniu
Utwórz sieć z:
Następnie na dole pliku docker-compose.yaml umieść to:
Gotowe. Nie ma potrzeby dodawania sieci do wszystkich definicji kontenerów itp., A jeśli chcesz, możesz ponownie użyć sieci z innymi plikami docker-compose.
źródło
Jeśli chcesz mieć wiele sieci, możesz kontrolować, ile miejsca IP Docker przekazuje każdej sieci za pomocą
default-address-pools
ustawienia demona, więc możesz dodać to do/etc/docker/daemon.json
:Tutaj zarezerwowałem
10.254.1.1/24
(254 adresy IP) dla sieci mostkowej.Dla każdej innej sieci, którą utworzę, docker podzieli
10.254.0.0
przestrzeń (65 tys. Hostów), udostępniając jednocześnie 16 hostów ("size":28
odnosi się do maski CIDR dla 16 hostów).Jeśli utworzę kilka sieci, a następnie uruchomię
docker network inspect <name>
na nich, może wyświetlić się coś takiego:Te
10.254.0.32/28
środki to sieć może używać adresów IP z 1610.254.0.32
-10.254.0.47
.źródło
Napotkałem ten sam problem
Tworzenie sieci „schemaregistry1_default” z domyślnym sterownikiem
BŁĄD: nie można znaleźć dostępnej, nienakładającej się puli adresów IPv4 wśród wartości domyślnych do przypisania do sieci
i nic nie pomogło, dopóki nie wyłączyłem Cisco VPN. po tym docker-compose działało
źródło
Naprawiłem ten problem krok po kroku:
wyłącz swoją sieć (bezprzewodową lub przewodową ...).
zrestartuj system.
przed włączeniem sieci na PC wykonaj polecenie docker-compose up, utworzy nową sieć.
wtedy możesz włączyć sieć i kontynuować ...
źródło