Docker "त्रुटि: नेटवर्क पर असाइन करने के लिए चूक के बीच एक उपलब्ध, गैर-अतिव्यापी IPv4 एड्रेस पूल नहीं मिल सका"


154

apkmirror-scraper-composeनिम्नलिखित संरचना के साथ मेरे पास एक निर्देशिका है :

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

मैं निम्नलिखित को चलाने की कोशिश कर रहा हूं 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

जहां के Dockerfileलिए 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"]

उसके लिए privoxyहै

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

जहां configदो पंक्तियों के होते हैं

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

और के Dockerfileलिए scraperहै

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

जहाँ requirements.txtएकल पंक्ति है requests। अंत में, प्रोग्राम newnym.pyको बस यह जांचने के लिए डिज़ाइन किया गया है कि क्या टोर का उपयोग करके आईपी एड्रेस को बदलना काम कर रहा है:

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सफलतापूर्वक बनाता है, लेकिन अगर मैं कोशिश docker-compose up, मैं निम्न त्रुटि संदेश मिलता है:

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

मैंने इस त्रुटि संदेश पर मदद की तलाश की, लेकिन कोई भी नहीं खोज सका। इस त्रुटि के कारण क्या है?


1
नहीं, docker psकोई कंटेनर नहीं दिखा रहा है।
कर्ट पीक

77
क्या आपके पास वीपीएन जुड़ा हुआ है? इसके अलावा, क्या आपने अपने कंपूटर को फिर से शुरू करने की कोशिश की है? (मैं googling कर रहा हूँ) github.com/moby/moby/issues/30295
रॉबर्ट

3
क्या आप कोशिश कर सकते हैं docker network lsऔर पुष्टि कर सकते हैं कि नेटवर्क पहले से ही आपके होस्ट पर बनाए गए थे।
पीटर हाउगे

1
धन्यवाद @Robert मेरे पास PIA VPN चल रहा था, एक बार जब मैं डिस्कनेक्ट और बाहर निकल गया, तो यह काम किया।
xx1xx

15
docker network prune। इससे आपकी समस्या का समाधान हो जाएगा
जिना बालू

जवाबों:


276

मैंने देखा है कि यह सुझाया गया है कि डॉकटर अधिकतम निर्मित नेटवर्क पर हो सकता है। docker network pruneकम से कम एक कंटेनर द्वारा उपयोग नहीं किए जाने वाले सभी नेटवर्क को हटाने के लिए कमांड का उपयोग किया जा सकता है।

मेरा मुद्दा समाप्त हो रहा है, जैसा कि रॉबर्ट ने टिप्पणी की: ओपेनवपन के साथ एक मुद्दा service openvpn stop'हल' समस्या।


10
यदि आपको वीपीएन के साथ डॉक करने की आवश्यकता है तो यहां संभव समाधान है: stackoverflow.com/q/45692255/7918
जेबी

45
OpenVPN सेवा मेरे लिए मुद्दा था।
Liviu Ilea

उपरोक्त उत्तर को जोड़ने के लिए, यदि आपको इस तरह की कोई समस्या मिलती है तो सिस्टम वास्तव में मदद कर सकता है। Docker system pruneएक फिक्स भी हो सकता है, लेकिन कृपया सावधान रहें, यह आपके DB को हटा सकता है, केवल इसका उपयोग करें यदि आप DB की परवाह नहीं करते हैं, या यदि आपका DB कंटेनर चल रहा है, तो यह कमांड सुरक्षित है क्योंकि यह केवल चीरों का उपयोग नहीं कर रहा है कम से कम एक कंटेनर द्वारा।
स्वीट चिली फिली

धन्यवाद। मैं पुष्टि करता हूं कि Openvpn क्लाइंट को रोकने के लिए काम करेगा। मैंने इसे कुछ दिन पहले शुरू किया था, फिर मैंने आज डॉकटर-कंपोज़ किया और उस त्रुटि को प्राप्त किया।
टीटी टीटी

1
एक ऐसे जीवन की कल्पना करें जहां हमारे उपकरण हमें उपयोगी डिबगिंग जानकारी दें।
डेमियन रोशे

157

मैं इस समस्या में भाग गया क्योंकि मेरे पास OpenVPN चल रहा था। जैसे ही मैंने ओपन वीपीएन को मार docker-compose upदिया , सही सलामत निकाल दिया, और त्रुटि गायब हो गई।


9
यहां एक और वीपीएन प्रदाता (एक्सप्रेसवएन) के साथ।
बर्क

1
ओपन वीपीएन के साथ एक ही समस्या
निकोलई

6
इसलिए मेरे पास एक ही मुद्दा था और मैं सोच रहा हूं कि ऐसा क्यों हो रहा है। वीपीएन से कनेक्ट होने पर डॉकर नेटवर्किंग क्यों गड़बड़ हो जाती है।
डेविड फिकोसिल्लो

2
मुझे निजी इंटरनेट एक्सेस के साथ एक ही समस्या थी
निकोलस

1
मैंने redirect-gateway def1अपनी Openvpn सेवा को मारे बिना मुद्दे के आसपास जाने के बजाय मार्गों को जोड़ा है ।
डगलस लियू

59

मैं OpenVPN के साथ इस समस्या में काम कर रहा था और मुझे एक समाधान मिला है जहाँ आपको OpenVPN सर्वर को बंद / प्रारंभ नहीं करना चाहिए।

आइडिया जिसे आपको निर्दिष्ट करना चाहिए कि आप किस सबनेट का उपयोग करना चाहते हैं। में docker-compose.ymlलिखने:

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

बस। अब, defaultनेटवर्क का उपयोग किया जाएगा और यदि आपके वीपीएन ने आपको 172.16.57.*सबनेट से कुछ असाइन नहीं किया है, तो आप ठीक हैं।


2
यह भी खूब रही! मेरा सर्वर बॉक्स ओपनवीपीएन के बिना नहीं खड़ा हो सकता है इसलिए वीपीएन को अक्षम करने पर (यहां तक ​​कि अस्थायी रूप से) सलाह मेरे लिए सब बकवास है।
जुग

4
यह स्वीकृत उत्तर होना चाहिए, क्योंकि वीपीएन को मारना बेवकूफी है
मिचनोवका

172.177.57.0/24 एक न्यूड कॉर्ड नहीं है? यदि ऐसा है, तो यह इंटरनेट पर सीमित संख्या में मेजबानों से संपर्क करने में समस्याएं पैदा कर सकता है।
dstromberg

1
हाँ, यहाँ एक गड़बड़ है। 172.16.*.*सबनेट से एक का उपयोग करना बेहतर होगा
Arenim

मुझे नहीं लगता कि इसका उपयोग 172.177.57.*करना एक अच्छा विचार है, क्योंकि यह en.wikipedia.org/wiki/PStreet_network#PStreet_IPv4_addresses में नहीं है । इस सीमा के भीतर पतों का उपयोग करें।
ल्यूसिडियन

53

बाद पीटर हाउगे की टिप्पणी , चल रहा पर docker network lsमैं देखा (अन्य लाइनों के बीच) निम्नलिखित:

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

दोनों के साथ NAMEऔर DRIVERजैसा कि hostलगता है कि वह "आपके होस्ट पर पहले से ही बनाए गए नेटवर्क" का उल्लेख कर रहा है। तो, https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 के बाद , मैंने कमांड चलाया

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

अब docker-compose upकाम करता है (हालांकि newnym.pyएक त्रुटि पैदा करता है)।


8
हाल के डॉक संस्करणों में काम नहीं करता है- उन्होंने अंतर्निहित नेटवर्क (जैसे default) को हटा दिया है
pospi

यदि आप ट्रैफिक का उपयोग कर रहे हैं, तो इस कमांड को चलाने से पहले उस कंटेनर को बंद करना सुनिश्चित करें। अन्यथा यह सोचेगा कि आपके सभी नेटवर्क सक्रिय हैं।
Allure वेब सॉल्यूशंस

अगर मैं दौड़ता docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')हूं तो मुझे Error response from daemon: bridge is a pre-defined network and cannot be removedउबंटू 20.04Docker version 19.03.9, build 9d988398e7 docker-compose version 1.25.0, build unknown
therobyouknow

47

मेरी भी यही समस्या है। मैं भागा docker system prune -a --volumes, docker network pruneलेकिन न तो मेरी मदद की।

मैं एक वीपीएन का उपयोग करता हूं, मैंने वीपीएन को बंद कर दिया है और इसके बाद डॉकटर ने सामान्य शुरुआत की और नेटवर्क बनाने में सक्षम था। उसके बाद, आप वीपीएन को फिर से सक्षम कर सकते हैं।


3
मेरा वीपीएन कनेक्शन उसी सबनेट पर था जैसा कि एक डॉकर उपयोग करने की कोशिश कर रहा था। डिस्कनेक्ट करने से मेरे लिए समस्या हल हो गई। :)
XtraSimplicity

1
आह्ह्ह्हह्हह्हह्हह चल रहा था।
अदिइइ

25

जैसा कि अन्य उत्तरों में उल्लेख किया गया है, डॉकर का डिफ़ॉल्ट स्थानीय bridgeनेटवर्क केवल 30 अलग-अलग नेटवर्क (उनमें से प्रत्येक को उनके नाम से विशिष्ट पहचान योग्य) का समर्थन करता है। यदि आप उनका उपयोग नहीं कर रहे हैं, तो docker network pruneचाल चलेगा।

हालांकि, आप 30 से अधिक कंटेनरों को स्थापित करने में रुचि रख सकते हैं, प्रत्येक अपने स्वयं के नेटवर्क के साथ। क्या आप ऐसा करने में रुचि रखते हैं तो आपको एक overlayनेटवर्क को परिभाषित करने की आवश्यकता होगी । यह थोड़ा और मुश्किल है लेकिन यहाँ बहुत अच्छी तरह से प्रलेखित है

EDIT (मई 2020): लिंक अनुपलब्ध हो गया है, डॉक्स से गुजरना वहाँ एक सटीक प्रतिस्थापन नहीं है, लेकिन मैं यहाँ से शुरू करने की सलाह दूंगा ।


आपके लिंक किए गए एक 404 है
chovy

@chovy धन्यवाद मुझे बताने के लिए, उन्होंने अपने डॉक्स को फिर से व्यवस्थित किया है। अब अपडेट हो रहा है।
कार्लोस सेगर्रा

13

मुझे एक ही त्रुटि संदेश के साथ एक समान समस्या थी लेकिन अप्रयुक्त डॉक नेटवर्क को हटाने के साथ समाधान ने मेरी मदद नहीं की। मैंने सभी गैर-डिफ़ॉल्ट docker नेटवर्क (और सभी चित्र और कंटेनर) को हटा दिया है, लेकिन इससे मदद नहीं मिली - docker अभी भी एक नया नेटवर्क बनाने में सक्षम नहीं था।

समस्या का कारण नेटवर्क इंटरफेस में था जो ओपनवीएनएन इंस्टॉलेशन के बाद छोड़ दिया गया था। (यह पहले होस्ट पर स्थापित किया गया था।) मैंने उन्हें 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)
...

मैंने पाया है कि मैं उन्हें कुछ आदेशों के साथ हटा सकता हूं:

ip link delete tun0
ip link delete tun1

इसके बाद यह समस्या गायब हो गई है।


कई विकल्पों को आज़माने के बाद यह मेरे लिए काम कर रहा है - ओपनवपन को बंद कर दिया, पीसी को फिर से शुरू किया, डॉकटर, नेटवर्क प्रून, आदि को फिर से स्थापित किया ...
मैट

10
  1. जांचें कि क्या कोई अन्य कंटेनर चल रहा है, यदि हां, तो करें: docker-compose down
  2. यदि वीपीएन जुड़ा हुआ है, तो उसे डिस्कनेक्ट करें और फिर से डॉकटर कंटेनर को ऊपर करने का प्रयास करें:

    docker-compose up -d container_name

मैंने कोई वीपीएन नहीं चलाया है लेकिन docker-compose downइसे मेरे लिए तय किया है
IMB


8

मैंने एक ही समस्या का सामना किया, यही कारण है कि आप अधिकतम नेटवर्क तक पहुंच गए हैं:

क्या करें: docker network ls उपयोग करने के लिए एक चुनें:docker network rm networkname_default


7

टी एल; डॉ

जोड़ना

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

network_modeप्रलेखन के बारे में पढ़ें

दीर्घ संस्करण

डिस्क्लेमर : मैं डॉकर नेटवर्किंग के बारे में बहुत जानकार नहीं हूं, लेकिन इसने मेरे लिए यह चाल चली। YMMV।

जब मैंने दौड़ लगाई docker run my-imageतो नेटवर्किंग ने मुझे कोई समस्या नहीं दी, लेकिन जब मैंने इस कमांड को एक docker-compose.ymlफाइल में परिवर्तित किया , तो मुझे ओपी के समान त्रुटि मिली।

मैंने इंटरनेट पर Arenim के उत्तर और कुछ अन्य सामग्री को पढ़ा, जिसमें मौजूदा नेटवर्क का फिर से उपयोग करने का सुझाव दिया गया था।

आप इस तरह मौजूदा नेटवर्क पा सकते हैं:

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

मैं डिफ़ॉल्ट का पुन: उपयोग करना चाहता था bridge नेटवर्क , इसलिए मैंने जोड़ा

services:
  web:
    ...

networks:
  default:
    external:
      name: bridge

को जड़ मेरी की docker-compose.yml(मेरी तो नहीं अंदर एक servicesहै, लेकिन जड़ खरोज पर)।

मुझे अब निम्न त्रुटि मिली:

त्रुटि: आपके कंटेनर नेटवर्क के लिए स्कोप किया गया उपनाम केवल उपयोगकर्ता परिभाषित नेटवर्क में कंटेनर के लिए समर्थित है

इस डॉकटर गितुब मुद्दे से मुलाकात हुई , जिसने स्पष्ट रूप से कहा कि मुझे network_modeअपने ऑब्जेक्ट को जोड़ना चाहिए docker-compose:

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

मैं डॉकर संस्करण 18.09.8, docker-composeसंस्करण 1.24.1और रचना फ़ाइल प्रारूप का उपयोग कर रहा था 3.7


1
यह एक सवाल है या एक जवाब है?
चॉवि

अधिक: डॉक-नेटवर्क भूमि में मेरा रोमांच और मैं अटक गई चीज़ पर कैसे ठोकर खाई।
स्टेफन वैन डेन अककर

6

यह मेरे साथ हुआ क्योंकि मैं उपयोग कर रहा था OpenVPN । मुझे एक रास्ता मिला कि मुझे वीपीएन का उपयोग बंद करने या मैन्युअल रूप से डॉकटर-कंपोज़ फ़ाइल में नेटवर्क जोड़ने की आवश्यकता नहीं है और न ही किसी पागल स्क्रिप्ट को चलाने की आवश्यकता है।

मैंने WireGuardइसके बजाय स्विच किया OpenVPN। अधिक विशेष रूप से, जैसा कि मैं नॉर्डपॉप समाधान चला रहा हूं, मैंने वायरगार्ड स्थापित किया और इसके संस्करण का उपयोग किया, नॉर्डलैक्स।


ओपन वीपीएन से नॉर्डवीपीएन के लिए वायरगार्ड प्रोटोकॉल पर स्विच करने की विशिष्ट कमांड है nordvpn set technology NordLynx। यह एक अलग उत्पाद नहीं है, और वर्तमान में केवल लिनक्स और आईओएस पर उपलब्ध है।
tephyr

6

वीपीएन को मारना आवश्यक नहीं है।

एक नए नेटवर्क का उपयोग करने के बारे में यह अन्य टिप्पणी मेरे लिए समाधान के बहुत करीब आती है , और थोड़ी देर के लिए काम कर रही थी, लेकिन मुझे एक बेहतर तरीका मिला जो किसी अन्य प्रश्न में कुछ बात करने के लिए धन्यवाद

इसके साथ एक नेटवर्क बनाएँ:

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

फिर, docker-compose.yaml के निचले भाग में, इसे डालें:

networks:
  default:
    external: 
      name: your-network

किया हुआ। सभी कंटेनर परिभाषाओं आदि में नेटवर्क जोड़ने की कोई आवश्यकता नहीं है और यदि आप चाहें तो नेटवर्क को अन्य डॉकटर-कंपोज़ फ़ाइलों के साथ फिर से उपयोग कर सकते हैं।


4

यदि आप बहुत सारे नेटवर्क चाहते हैं तो आप यह नियंत्रित कर सकते हैं कि default-address-poolsबहरीन सेटिंग के माध्यम से प्रत्येक नेटवर्क में कितना IP स्पेस डॉकटर हाथ देता है , इसलिए आप इसे अपने साथ जोड़ सकते हैं /etc/docker/daemon.json:

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

यहां मैंने 10.254.1.1/24ब्रिज नेटवर्क के लिए (254 आईपी पते) आरक्षित किए हैं।

मेरे द्वारा बनाए गए किसी भी अन्य नेटवर्क के लिए, docker 10.254.0.0एक समय में 16 होस्ट्स ( CIDR मास्क"size":28 को संदर्भित करता है , 16 होस्ट्स के लिए ) देता है, अंतरिक्ष (65k होस्ट्स) का विभाजन करेगा ।

यदि मैं कुछ नेटवर्क बनाता हूं और फिर docker network inspect <name>उन पर चलता हूं, तो यह कुछ इस तरह प्रदर्शित हो सकता है:

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

10.254.0.32/28साधन में इस नेटवर्क के 16 IP पते का उपयोग कर सकते हैं 10.254.0.32- 10.254.0.47


1

मैं एक समस्या मे फंस गया

डिफ़ॉल्ट ड्राइवर
ERROR के साथ नेटवर्क "schemaregistry1_default" बनाना: नेटवर्क पर असाइन करने के लिए चूक के बीच एक उपलब्ध, गैर-अतिव्यापी IPv4 पता पूल नहीं मिल सका।

और सिस्को वीपीएन को बंद करने तक कुछ भी मदद नहीं की। उसके बाद डॉकटर-कंपोज ने काम किया


-3

मैंने इस समस्या को चरणों द्वारा निर्धारित किया है:

  1. अपना नेटवर्क बंद करें (वायरलेस या वायर्ड ...)।

  2. अपने सिस्टम को रिबूट करें।

  3. पीसी पर अपने नेटवर्क को चालू करने से पहले, कमांड डॉकटर-कंपोज़ को निष्पादित करें, यह नया नेटवर्क बनाने जा रहा है।

  4. तब आप नेटवर्क चालू कर सकते हैं और आगे बढ़ सकते हैं ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.