Docker “ERROR: tidak dapat menemukan kumpulan alamat IPv4 yang tersedia dan tidak tumpang tindih di antara default untuk ditetapkan ke jaringan”

154

Saya memiliki direktori apkmirror-scraper-composedengan struktur berikut:

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

Saya mencoba menjalankan yang berikut ini 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

dimana Dockerfileuntuk toritu

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

untuk privoxyitu

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

dimana configterdiri dari dua garis

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

dan Dockerfileuntuk scraperitu

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

di mana requirements.txtberisi satu baris requests. Akhirnya, program newnym.pyini dirancang untuk hanya menguji apakah mengubah alamat IP menggunakan Tor berfungsi:

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

The docker-compose buildmembangun berhasil, tapi jika saya mencoba docker-compose up, saya mendapatkan pesan error berikut:

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

Saya mencoba mencari bantuan pada pesan kesalahan ini, tetapi tidak dapat menemukannya. Apa yang menyebabkan kesalahan ini?

Kurt Peek
sumber
1
Tidak, docker pstidak menunjukkan wadah berjalan.
Kurt Peek
77
Apakah Anda memiliki VPN yang terhubung? Juga, sudahkah Anda mencoba me-restart compueter Anda? (Saya googling) github.com/moby/moby/issues/30295
Robert
3
Bisakah Anda mencoba docker network lsdan mengonfirmasi jika jaringan sudah dibuat di host Anda.
Peter Hauge
1
Terima kasih @Robert, saya telah menjalankan PIA VPN, setelah saya memutus dan keluar, itu berhasil.
xx1xx
15
docker network prune. Ini akan menyelesaikan masalah Anda
Jinna Balu

Jawaban:

276

Saya telah melihatnya menyarankan buruh pelabuhan mungkin pada maksimum jaringan yang dibuat. Perintah docker network pruneini dapat digunakan untuk menghapus semua jaringan yang tidak digunakan oleh setidaknya satu kontainer.

Masalah saya akhirnya, ketika Robert berkomentar tentang: masalah dengan openvpn service openvpn stop'memecahkan' masalah.

menjadi lebih baik
sumber
10
Jika Anda perlu menjalankan docker bersama vpn di sini adalah solusi yang mungkin: stackoverflow.com/q/45692255/7918 .
jb.
45
Layanan OpenVPN adalah masalah bagi saya.
Liviu Ilea
Untuk menambah jawaban di atas, jika Anda mendapatkan masalah seperti pemangkasan ini, sistem ini dapat sangat membantu. Docker system prunejuga bisa menjadi perbaikan, tetapi harap berhati-hati, ini dapat menghapus DB Anda, hanya gunakan ini jika Anda tidak peduli untuk Anda DB, atau jika wadah DB Anda berjalan maka perintah ini aman karena hanya memangkas hal-hal yang tidak digunakan oleh setidaknya satu wadah.
Sweet Chilly Philly
Terima kasih. Saya mengkonfirmasi bahwa untuk menghentikan klien openvpn akan berfungsi. Saya telah memulainya beberapa hari yang lalu, lalu saya menulis komposisi buruh pelabuhan hari ini dan mendapatkan kesalahan itu.
Dat TT
1
Bayangkan kehidupan di mana alat kami memberi kami informasi debug yang berguna.
Damien Roche
157

Saya mengalami masalah ini karena saya menjalankan OpenVPN. Segera setelah saya membunuh OpenVPN, docker-compose uplangsung ditembakkan, dan kesalahannya hilang.

DrDamnit
sumber
9
Sama di sini dengan penyedia VPN lain (expressvpn).
berkelanjutan
1
Masalah yang sama dengan menjalankan OpenVPN
Nicolai
6
Jadi saya punya masalah yang sama dan saya bertanya-tanya mengapa ini terjadi. Mengapa jaringan Docker menjadi bingung ketika terhubung ke VPN.
David Ficociello
2
Saya memiliki masalah yang sama dengan Akses Internet Pribadi
Nicolas
1
Saya telah menambahkan rute daripada redirect-gateway def1untuk mengatasi masalah ini tanpa mematikan layanan openvpn saya.
Douglas Liu
59

Saya berlari dalam masalah ini dengan OpenVPN yang bekerja dengan baik dan saya telah menemukan solusi di mana Anda TIDAK harus menghentikan / memulai server OpenVPN.

Ide bahwa Anda harus menentukan subnet apa yang ingin Anda gunakan. Dalam docker-compose.ymlmenulis:

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

Itu dia. Sekarang, defaultjaringan akan digunakan dan jika VPN Anda tidak memberikan Anda sesuatu dari 172.16.57.*subnet, Anda baik-baik saja.

Arenim
sumber
2
Ini bagus! Kotak server saya tidak dapat berdiri tanpa OpenVPN sehingga saran tentang (bahkan sementara) menonaktifkan VPN semuanya omong kosong bagi saya.
iBug
4
ini harus menjadi jawaban yang diterima, karena membunuh VPN itu bodoh
michnovka
Bukankah 172.177.57.0/24 merupakan newtork yang dialihkan? Jika demikian, itu dapat menyebabkan masalah menghubungi sejumlah host di internet.
dstromberg
1
ya, sebuah kesalahan di sini. Akan lebih baik menggunakan satu dari 172.16.*.*subnet
Arenim
Saya tidak berpikir bahwa menggunakan 172.177.57.*adalah ide yang baik, karena itu bukan di en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses . Gunakan alamat dalam kisaran ini.
lucidyan
53

Berikut Peter Hauge 's komentar , setelah berjalan docker network lssaya melihat (antara garis lainnya) berikut ini:

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

Baris dengan NAMEdan sepertinya DRIVERkeduanya hostmengacu pada "jaringan yang sudah dibuat di host Anda". Jadi, mengikuti https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 , saya menjalankan perintah

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

Sekarang docker-compose upberfungsi (meskipun newnym.pymenghasilkan kesalahan).

Kurt Peek
sumber
8
Tidak bekerja di versi buruh pelabuhan yang lebih baru - mereka tidak diizinkan menghapus jaringan default
bawaan
Jika Anda menggunakan Traefik, pastikan untuk mematikan wadah itu sebelum menjalankan perintah ini. Jika tidak, semua jaringan Anda akan aktif.
Allure Web Solutions
jika saya menjalankan docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')saya dapatkan Error response from daemon: bridge is a pre-defined network and cannot be removeddi Ubuntu 20.04Docker version 19.03.9, build 9d988398e7 docker-compose version 1.25.0, build unknown
therobyouknow
47

Saya memiliki masalah yang sama. Saya berlari docker system prune -a --volumes, docker network prunetetapi tidak ada yang membantu saya.

Saya menggunakan VPN, saya mematikan VPN dan, setelah itu buruh pelabuhan mulai normal dan mampu membuat jaringan. Setelah itu, Anda dapat mengaktifkan VPN lagi.

madjardi
sumber
3
Koneksi VPN saya berada di subnet yang sama dengan yang digunakan oleh salah satu pekerja pelabuhan. Putuskan hubungan memecahkan masalah bagi saya. :)
XtraSimplicity
1
ahhhVPN sedang berjalan.
Adiii
25

Seperti jawaban lain yang disebutkan, bridgejaringan lokal default Docker hanya mendukung 30 jaringan yang berbeda (masing-masing dari mereka dapat diidentifikasi secara unik berdasarkan namanya). Jika Anda tidak menggunakannya, maka docker network pruneakan melakukan trik.

Namun, Anda mungkin tertarik untuk membangun lebih dari 30 kontainer, masing-masing dengan jaringan mereka sendiri. Jika Anda tertarik melakukannya maka Anda perlu mendefinisikan overlayjaringan. Ini sedikit lebih rumit tetapi didokumentasikan dengan sangat baik di sini .

EDIT (Mei 2020): Tautan tidak tersedia, melihat dokumen tidak ada pengganti yang tepat, tapi saya akan merekomendasikan mulai dari sini .

Carlos Segarra
sumber
Tautan
@chovy terima kasih telah memberi tahu saya, mereka telah mengatur ulang dokumen mereka. Memperbarui sekarang.
Carlos Segarra
13

Saya memiliki masalah yang identik dengan pesan kesalahan yang sama tetapi solusi dengan penghapusan jaringan buruh pelabuhan yang tidak digunakan tidak membantu saya. Saya telah menghapus semua jaringan buruh pelabuhan non-standar (dan semua gambar dan wadah juga) tetapi tidak membantu - buruh pelabuhan masih tidak dapat membuat jaringan baru.

Penyebab masalahnya adalah pada antarmuka jaringan yang tertinggal setelah instalasi OpenVpn. (Itu sudah diinstal pada host sebelumnya.) Saya menemukan mereka dengan menjalankan ifconfigperintah:

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

Saya menemukan bahwa saya dapat menghapusnya dengan beberapa perintah:

ip link delete tun0
ip link delete tun1

Setelah ini masalahnya hilang.

Rara
sumber
Ini bekerja untuk saya setelah mencoba beberapa opsi - berhenti openvpn, restart pc, docker diinstal ulang, pemangkasan jaringan, dll ...
Matt
10
  1. Periksa apakah ada wadah lain yang berjalan, Jika ya, lakukan: docker-compose down
  2. Jika VPN terhubung, maka lepaskan dan coba kembali ke atas wadah docker:

    docker-compose up -d container_name
Nandini Chaurasiya
sumber
Saya tidak punya VPN yang berjalan tetapi docker-compose downmemperbaikinya untuk saya
IMB
8

Anda dapat mencoba

$sudo service network-manager restart

Bekerja untukku.

Ivan Mishur
sumber
Bekerja untuk saya juga!
mmrs151
8

Saya mengalami masalah yang sama, alasan mengapa Anda mencapai maks jaringan:

lakukan: docker network ls Pilih satu untuk dihapus menggunakan:docker network rm networkname_default

Amine Benkeroum
sumber
7

TL; DR

Menambahkan

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

Baca tentang network_modedalam dokumentasi .

Versi panjang

Penolakan : Saya tidak tahu banyak tentang jaringan Docker, tapi ini berhasil bagi saya. YMMV.

Ketika saya menjalankan docker run my-imagejaringan tidak memberi masalah, tetapi ketika saya mengubah perintah ini menjadi docker-compose.ymlfile, saya mendapatkan kesalahan yang sama dengan OP.

Saya membaca jawaban Arenim dan beberapa hal lain di internet yang menyarankan untuk menggunakan kembali jaringan yang ada.

Anda dapat menemukan jaringan yang ada seperti ini:

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

Saya ingin menggunakan kembali bridgejaringan default , jadi saya menambahkan

services:
  web:
    ...

networks:
  default:
    external:
      name: bridge

ke root saya docker-compose.yml(jadi tidak di dalam salah satu dari saya services, tetapi pada indentasi root).

Saya sekarang mendapatkan kesalahan berikut:

GALAT: untuk alias wadah-lingkup jaringan Anda hanya didukung untuk kontainer di jaringan yang ditentukan pengguna

Ini menyebabkan bertemu dengan masalah Docker Github ini , yang dengan jelas menyatakan bahwa saya harus menambahkan network_modeobjek ke docker-compose:

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

Saya menggunakan versi Docker 18.09.8, docker-composeversi 1.24.1dan format file penulisan 3.7.

Stefan van den Akker
sumber
1
apakah ini pertanyaan atau jawaban?
chovy
More a: petualangan saya di tanah jaringan Docker dan bagaimana saya menemukan sesuatu yang macet.
Stefan van den Akker
6

Ini terjadi pada saya karena saya menggunakan OpenVPN. Saya menemukan cara saya tidak perlu berhenti menggunakan VPN atau secara manual menambahkan jaringan ke file pembuatan docker atau menjalankan skrip gila.

Saya beralih ke WireGuardbukan OpenVPN. Lebih khusus lagi, ketika saya menjalankan solusi nordvpn, saya menginstal WireGuard dan menggunakan versi mereka, NordLynx.

ehzicamesmo
sumber
Perintah khusus untuk beralih dari OpenVPN ke protokol WireGuard untuk NordVPN adalah nordvpn set technology NordLynx. Ini bukan produk terpisah, dan saat ini hanya tersedia di Linux & iOS.
tephyr
6

Membunuh vpn tidak diperlukan.

Komentar lain tentang menggunakan jaringan baru ini cukup dekat dengan solusi untuk saya , dan bekerja untuk sementara waktu, tetapi saya menemukan cara yang lebih baik berkat beberapa pembicaraan di pertanyaan lain

Buat jaringan dengan:

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

Kemudian, di bagian bawah docker-compose.yaml, taruh ini:

networks:
  default:
    external: 
      name: your-network

Selesai Tidak perlu menambahkan jaringan ke semua definisi wadah, dll. Dan Anda dapat menggunakan kembali jaringan dengan file-file pembuatan docker lain juga jika Anda mau.

Teratai
sumber
4

Jika Anda ingin banyak jaringan maka Anda dapat mengontrol seberapa banyak IP docker yang dibagikan ke masing-masing jaringan melalui default-address-poolspengaturan deamon, sehingga Anda dapat menambahkan ini ke /etc/docker/daemon.json:

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

Di sini saya telah memesan 10.254.1.1/24(254 alamat IP) untuk jaringan jembatan.

Untuk jaringan lain yang saya buat, buruh pelabuhan akan mempartisi 10.254.0.0ruang (host 65k), memberikan 16 host sekaligus ( "size":28mengacu pada topeng CIDR , untuk 16 host).

Jika saya membuat beberapa jaringan dan kemudian menjalankannya docker network inspect <name>, itu mungkin menampilkan sesuatu seperti ini:

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

The 10.254.0.32/28berarti jaringan ini dapat menggunakan 16 ip alamat dari 10.254.0.32- 10.254.0.47.

Matius
sumber
1

Saya mengalami masalah yang sama

Membuat jaringan "schemaregistry1_default" dengan driver default
ERROR: tidak dapat menemukan kumpulan alamat IPv4 yang tersedia dan tidak tumpang tindih di antara default untuk ditetapkan ke jaringan

dan tidak ada yang membantu sampai saya mematikan Cisco VPN. setelah itu buruh pelabuhan-menulis berhasil

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

Saya memperbaiki masalah ini dengan langkah-langkah:

  1. matikan jaringan Anda (nirkabel atau kabel ...).

  2. reboot sistem Anda.

  3. sebelum menghidupkan jaringan Anda di PC, jalankan perintah docker-compose up, itu akan membuat jaringan baru.

  4. maka Anda dapat mengaktifkan jaringan dan melanjutkan ...

salim
sumber