Docker "HATA: ağa atanacak varsayılanlar arasında kullanılabilir, çakışmayan bir IPv4 adres havuzu bulunamadı"


172

apkmirror-scraper-composeAşağıdaki yapıya sahip bir dizinim var :

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

Aşağıdakileri çalıştırmaya çalışıyorum 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

nerede Dockerfileiçin torise

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

söz konusu privoxyolduğu

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

burada configiki hat oluşmaktadır

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

ve Dockerfileiçin scraperDİR

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

burada requirements.txttek bir çizgi içerir requests. Son olarak, program newnym.pyTor kullanarak IP adresini değiştirmenin işe yarayıp yaramadığını test etmek için tasarlanmıştır:

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 buildBaşarıyla oluşturur, ama çalışırsanız docker-compose up, aşağıdaki hata iletisi alıyorum:

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

Bu hata mesajıyla ilgili yardım aramayı denedim ama bulamadım. Bu hataya ne sebep oluyor?


1
Hayır, docker psçalışan konteyner olmadığını gösterir.
Kurt Peek

92
Bağlı bir VPN'iniz var mı? Ayrıca, hesaplayıcınızı yeniden başlatmayı denediniz mi? (Googling yapıyorum) github.com/moby/moby/issues/30295
Robert

3
docker network lsAna makinenizde zaten ağlar oluşturulmuşsa bunu deneyebilir ve onaylayabilir misiniz ?
Peter Hauge

1
Teşekkürler @Robert PIA VPN çalışıyordu, bağlantıyı kesip çıktıktan sonra işe yaradı.
xx1xx

20
docker network prune. Bu, sorununuzu çözecek
Jinna Balu

Yanıtlar:


319

Docker'ın maksimum oluşturulan ağda olabileceğini önerdiğini gördüm. Komut docker network prune, en az bir konteyner tarafından kullanılmayan tüm ağları kaldırmak için kullanılabilir.

Robert'ın yorumladığı gibi, sorunum şu hale geldi: openvpn ile ilgili bir sorun sorunu service openvpn stop'çözdü'.


17
Docker'ı vpn ile birlikte çalıştırmanız gerekiyorsa, burada olası çözüm: stackoverflow.com/q/45692255/7918 .
jb.

53
OpenVPN Hizmeti benim için sorun oldu.
Liviu Ilea

1
Yukarıdaki cevaba eklemek gerekirse, böyle bir sorunla karşılaşırsanız, sistem gerçekten yardımcı olabilir. Docker system pruneayrıca bir düzeltme olabilir, ancak lütfen dikkatli olun, bu DB'nizi kaldırabilir, bunu yalnızca DB'nizi umursamıyorsanız kullanın veya DB kabınız çalışıyorsa, bu komut yalnızca kullanılmayan şeyleri erittiği için güvenlidir en az bir konteyner ile.
Sweet Chilly Philly

Teşekkürler. Openvpn istemcisini durdurmak için çalışacağını onaylıyorum. Birkaç gün önce başlattım, sonra bugün docker-compose'ı çalıştırdım ve bu hatayı aldım.
Dat TT

2
Araçlarımızın bize yararlı hata ayıklama bilgileri verdiği bir hayat hayal edin.
Damien Roche

175

Bu problemle karşılaştım çünkü OpenVPN çalışıyordu. OpenVPN'i öldürdüğüm anda, docker-compose upateş ettim ve hata ortadan kalktı.


9
Burada başka bir VPN sağlayıcısı (expressvpn) ile aynı.
berkes

1
OpenVPN'i çalıştırmayla aynı sorun
Nicolai

7
Yani ben de aynı sorunu yaşadım ve bunun neden olduğunu merak ediyorum. Bir VPN'e bağlandığında Docker ağı neden karışıyor?
David Ficociello

2
Özel İnternet Erişimi ile aynı sorunu yaşadım
Nicolas

1
redirect-gateway def1Openvpn hizmetimi kesmeden sorunu aşmak yerine rotalar ekledim .
Douglas Liu

79

Bu problemde OpenVPN çalışırken de karşılaştım ve OpenVPN sunucusunu durdurup başlatmamanız gereken bir çözüm buldum.

Tam olarak kullanmak istediğiniz alt ağı belirlemeniz gerektiği fikri. In docker-compose.ymlyazma:

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

Bu kadar. Şimdi, defaultağ kullanılacak ve VPN'iniz size 172.16.57.*alt ağdan bir şey atamadıysa, sorun yok.


5
Bu harika! Sunucu kutum OpenVPN olmadan duramaz, bu yüzden VPN'nin devre dışı bırakılmasıyla ilgili tavsiyeler (geçici olarak bile) benim için saçma.
2019

6
VPN'i öldürmek aptalca olduğu için bu kabul edilen cevap olmalı
michnovka

2
172.177.57.0/24 yönlendirilmiş bir haberci değil mi? Öyleyse, internette sınırlı sayıda ana bilgisayarla iletişim kurmada sorunlara neden olabilir.
dstromberg

1
evet, burada bir aksaklık. 172.16.*.*
Alt

1
Ben kullanarak sanmıyorum 172.177.57.*bunun için değil de, iyi bir fikirdir en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses . Bu aralıktaki adresleri kullanın.
lucidyan

54

Aşağıdaki Peter Hauge 'ın yorumunu çalıştıran üzerine, docker network lsaşağıda (diğer hatlar arasında) I testere:

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

"Ana makinenizde zaten oluşturulmuş ağlar" ile kastettiği satır NAMEve DRIVERher ikisi hostgibi görünüyor. Bu yüzden, https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430'u takip ederek komutu çalıştırdım

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

Şimdi docker-compose upçalışıyor ( newnym.pybir hata oluştursa da).


8
Daha yeni docker sürümlerinde çalışmıyor - yerleşik ağların kaldırılmasına izin default
vermediler

Traefik kullanıyorsanız, bu komutu çalıştırmadan önce bu kabı kapattığınızdan emin olun. Aksi takdirde tüm ağlarınızın aktif olduğunu düşünecektir.
Allure Web Solutions

Ben çalıştırırsanız docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')alıyorum Error response from daemon: bridge is a pre-defined network and cannot be removedUbuntu 20.04 üzerindeDocker version 19.03.9, build 9d988398e7 docker-compose version 1.25.0, build unknown
therobyouknow

48

Bende de aynı sorun var. Kaçtım docker system prune -a --volumes,docker network prune ama ikisi de bana yardım etmedi.

Bir VPN kullanıyorum, VPN'yi kapattım ve docker normal bir şekilde başladıktan sonra bir ağ oluşturabildim. Bundan sonra VPN'yi tekrar etkinleştirebilirsiniz.


3
VPN bağlantım, docker'ın kullanmaya çalıştığı aynı alt ağdaydı. Bağlantının kesilmesi sorunu benim için çözdü. :)
XtraSimplicity

1
ahhhVPN çalışıyordu.
Adiii

28

Belirtilen diğer yanıtlar gibi, Docker'ın varsayılan yerel bridgeağı yalnızca 30 farklı ağı destekler (her biri kendi adıyla benzersiz bir şekilde tanımlanabilir). Onları kullanmıyorsanız, o zamandocker network prune , hile yapacak.

Ancak, her biri kendi ağına sahip 30'dan fazla konteyner kurmak ilginizi çekebilir. Bunu yapmakla ilgileniyor olsaydınız, bir overlayağ tanımlamanız gerekirdi . Bu biraz daha zor ama burada son derece iyi belgelenmiştir .

DÜZENLEME (Mayıs 2020): Bağlantı kullanılamaz hale geldi, dokümanlar üzerinden geçerken tam bir yedek yok, ancak buradan başlamanızı tavsiye ederim .


Bağlantınız 404
chovy

1
@chovy bana haber verdiğiniz için teşekkürler, belgelerini yeniden düzenlediler. Şimdi güncelleniyor.
Carlos Segarra

13

Aynı hata mesajıyla aynı sorunla karşılaştım, ancak kullanılmayan docker ağlarının kaldırılmasıyla ilgili çözüm bana yardımcı olmadı. Varsayılan olmayan tüm docker ağlarını (ve tüm görüntüleri ve kapsayıcıları) sildim ancak yardımcı olmadı - docker hala yeni bir ağ oluşturamadı.

Sorunun nedeni OpenVpn kurulumundan sonra kalan ağ arayüzleriydi. (Daha önce ana bilgisayara yüklenmişti.) Bunları şu ifconfigkomutu çalıştırarak buldum :

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

Bunları birkaç komutla kaldırabileceğimi buldum:

ip link delete tun0
ip link delete tun1

Bundan sonra sorun ortadan kalktı.


Bu, birkaç seçeneği denedikten sonra benim için çalıştı - openvpn durduruldu, bilgisayarı yeniden başlattı, yeniden yüklenen docker, ağ ertelemesi, vb.
Matt

13

TL; DR

Ekle

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

network_modeBelgelerde okuyun .

Uzun versiyon

Feragatname : Docker ağ iletişimi hakkında çok bilgili değilim, ancak bu benim için hile yaptı. YMMV.

Ağı çalıştırdığımda docker run my-imagebana hiçbir sorun çıkmadı, ancak bu komutu birdocker-compose.yml dosyaya OP ile aynı hatayı aldım.

Arenim'in cevabını ve internette mevcut bir ağı yeniden kullanmayı öneren diğer bazı şeyleri okudum .

Mevcut ağları şu şekilde bulabilirsiniz:

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

Varsayılan bridgeağı yeniden kullanmak istedim , bu yüzden ekledim

services:
  web:
    ...

networks:
  default:
    external:
      name: bridge

için root benim içinde docker-compose.yml(Sesimin kadar değil iç birinde services, ama kök girintilemede).

Şimdi şu hatayı aldım:

HATA: kapsayıcı ağ kapsamlı takma adınız için yalnızca kullanıcı tanımlı ağlardaki kapsayıcılar için desteklenir

Bu , nesneyi şuna eklemem gerektiğini açıkça belirten Docker Github sorunuyla karşılaştı :network_modedocker-compose

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

Docker versiyonunu 18.09.8, docker-composeversiyonunu 1.24.1ve dosya oluşturma formatını kullanıyordum 3.7.


1
bu bir soru mu cevap mı?
chovy

1
Daha fazla a: Docker ağındaki maceralarım ve sıkışan bir şeye nasıl rastladığım.
Stefan van den Akker

10
  1. Başka bir konteynerin çalışıp çalışmadığını kontrol edin, Varsa şunları yapın: docker-compose down
  2. VPN bağlıysa, bağlantısını kesin ve docker container'ı açmayı tekrar deneyin:

    docker-compose up -d container_name
    

Çalışan VPN yok ama docker-compose downbenim için düzeltti
IMB


8

Aynı sorunu kodladım, bunun nedeni, maksimum ağ sayısına ulaşmanız:

docker network ls Yapın : Şunları kullanarak kaldırmak için birini seçin:docker network rm networkname_default


7

VPN'i öldürmek gerekli değildir.

Yeni bir ağ kullanma hakkındaki bu diğer yorum, benim için çözüme oldukça yaklaştı ve bir süredir çalışıyordu, ancak başka bir soruda bazı konuşmalar sayesinde daha iyi bir yol buldum

Şunlarla bir ağ oluşturun:

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

Ardından, docker-compose.yaml'nin altına şunu yazın:

networks:
  default:
    external: 
      name: your-network

Bitti. Tüm kapsayıcı tanımlarına vb. Ağ eklemenize gerek yoktur ve isterseniz ağı diğer docker-compose dosyalarıyla da yeniden kullanabilirsiniz.


6

Bu bana oldu çünkü kullanıyordum OpenVPN . VPN kullanmayı bırakmam veya docker-compose dosyasına manuel olarak bir ağ eklemem veya herhangi bir çılgın komut dosyası çalıştırmamın bir yolunu buldum.

Ben geçiş WireGuardyerine OpenVPN. Daha spesifik olarak, nordvpn çözümünü çalıştırdığım için WireGuard'ı kurdum ve kendi versiyonları olan NordLynx'i kullandım.


OpenVPN'den NordVPN için WireGuard protokolüne geçmek için özel komut nordvpn set technology NordLynx. Ayrı bir ürün değildir ve şu anda yalnızca Linux ve iOS'ta mevcuttur.
tephyr

5

Çok sayıda ağ istiyorsanız, default-address-poolsdeamon ayarı aracılığıyla her ağa ne kadar IP alanı docker dağıtacağını kontrol edebilirsiniz , böylece bunu aşağıdakilere ekleyebilirsiniz /etc/docker/daemon.json:

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

Burada 10.254.1.1/24köprü ağı için (254 IP adresi) ayırdım.

Oluşturduğum diğer herhangi bir ağ için docker, 10.254.0.0alanı bölümlere ayıracak (65k ana bilgisayar), bir seferde 16 ana bilgisayar verecek ( 16 ana bilgisayar için CIDR maskesini"size":28 ifade eder ).

Birkaç ağ oluşturur ve sonra docker network inspect <name>bunlarla çalışırsam , aşağıdaki gibi bir şey görüntüleyebilir:

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

Bu 10.254.0.32/28, bu ağın 10.254.0.32- ' den 16 ip adresini kullanabileceği anlamına gelir 10.254.0.47.


1
Cevap için çok teşekkürler. Docker hizmetinin yeniden başlatılması, üzerinde değişiklik yapıldıktan sonra gereklidir /etc/docker/daemon.json.
Tobias Ernst

3

Ben de aynı problemle karşılaştım

Varsayılan sürücü ile ağ "schemaregistry1_default" oluşturma
ERROR: ağa atanacak varsayılanlar arasında kullanılabilir, çakışmayan bir IPv4 adres havuzu bulamadı

ve Cisco VPN'i kapatana kadar hiçbir şey yardımcı olmadı. docker-compose up çalıştıktan sonra


Çok teşekkür ederim @ Вячеслав Калякин! VPN'i kapatmak durumumu da çözdü.
Willian


0

Ben de aynı hatayı aldım, ancak benim durumumda, çok fazla konteyner çalıştığım içindir (yaklaşık 220).


-3

Bu sorunu adımlarla düzelttim:

  1. ağınızı kapatın (kablosuz veya kablolu ...).

  2. sisteminizi yeniden başlatın.

  3. PC'de ağınızı açmadan önce docker-compose up komutunu çalıştırın, yeni ağ oluşturacaktır.

  4. sonra ağı açıp devam edebilirsiniz ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.