Docker INTERN ERROR: không thể tìm thấy nhóm địa chỉ IPv4 có sẵn, không chồng chéo trong số các giá trị mặc định để gán cho mạng.


154

Tôi có một thư mục apkmirror-scraper-composevới cấu trúc sau:

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

Tôi đang cố chạy như sau 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

nơi Dockerfilecho 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"]

trong đó configbao gồm hai dòng

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

Dockerfilecho scraper

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

nơi requirements.txtchứa dòng đơn requests. Cuối cùng, chương trình newnym.pyđược thiết kế để đơn giản kiểm tra xem việc thay đổi địa chỉ IP bằng Tor có hoạt động hay không:

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

Các docker-compose buildbản dựng thành công, nhưng nếu tôi thử docker-compose up, tôi nhận được thông báo lỗi sau:

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

Tôi đã cố gắng tìm kiếm trợ giúp về thông báo lỗi này, nhưng không thể tìm thấy bất kỳ. Điều gì gây ra lỗi này?


1
Không, docker pscho thấy không có container chạy.
Kurt Peek

77
Bạn có kết nối VPN không? Ngoài ra, bạn đã thử khởi động lại máy tính của mình chưa? (Tôi đang googling) github.com/moby/moby/issues/30295
Robert

3
Bạn có thể thử docker network lsvà xác nhận nếu các mạng đã được tạo trên máy chủ của bạn.
Peter Hauge

1
Cảm ơn @Robert Tôi đã chạy PIA VPN, khi tôi ngắt kết nối và thoát, nó đã hoạt động.
xx1xx

15
docker network prune. Điều này sẽ giải quyết vấn đề của bạn
Jinna Balu

Câu trả lời:


275

Tôi đã thấy nó gợi ý docker có thể ở mức tối đa của các mạng được tạo. Lệnh docker network prunecó thể được sử dụng để loại bỏ tất cả các mạng không được sử dụng bởi ít nhất một container.

Vấn đề của tôi đã kết thúc, như Robert nhận xét về: một vấn đề với openvpn service openvpn stop'đã giải quyết' vấn đề.


10
Nếu bạn cần chạy docker cùng với vpn thì đây là giải pháp khả thi: stackoverflow.com/q/45692255/7918 .
jb.

45
Dịch vụ OpenVPN là vấn đề đối với tôi.
Liviu Ilea

Để thêm vào câu trả lời ở trên, nếu bạn gặp bất kỳ vấn đề nào như việc cắt tỉa này, hệ thống thực sự có thể giúp ích. Docker system prunecũng có thể là một sửa chữa, nhưng xin hãy cẩn thận, điều này có thể loại bỏ DB của bạn, chỉ sử dụng điều này nếu bạn không quan tâm đến DB của bạn hoặc nếu bộ chứa DB của bạn đang chạy thì lệnh này an toàn vì nó chỉ cắt tỉa những thứ không được sử dụng bởi ít nhất một container.
Sweet Chilly Philly

Cảm ơn. Tôi xác nhận rằng để dừng ứng dụng khách openvpn sẽ hoạt động. Tôi đã bắt đầu nó vài ngày trước, sau đó tôi đã chạy docker-compose ngày hôm nay và đã gặp lỗi đó.
Đạt TT

1
Hãy tưởng tượng một cuộc sống nơi các công cụ của chúng tôi cung cấp cho chúng tôi thông tin gỡ lỗi hữu ích.
Damien Roche

157

Tôi gặp vấn đề này vì tôi đã chạy OpenVPN. Ngay khi tôi giết OpenVPN, docker-compose upbắn ngay lên và lỗi biến mất.


9
Tương tự ở đây với một nhà cung cấp VPN khác (expressvpn).
berkes

1
Vấn đề tương tự với việc chạy OpenVPN
Nicolai

6
Vì vậy, tôi đã có cùng một vấn đề và tôi tự hỏi tại sao điều này xảy ra. Tại sao mạng Docker bị lẫn lộn khi kết nối với VPN.
David Ficociello

2
Tôi gặp vấn đề tương tự với truy cập Internet cá nhân
Nicolas

1
Tôi đã thêm các tuyến đường thay vì redirect-gateway def1giải quyết vấn đề mà không giết dịch vụ openvpn của mình.
Douglas Liu

59

Tôi đã gặp vấn đề này với OpenVPN cũng hoạt động và tôi đã tìm thấy một giải pháp mà bạn KHÔNG nên dừng / khởi động máy chủ OpenVPN.

Ý tưởng rằng bạn nên chỉ định chính xác mạng con bạn muốn sử dụng. Trong docker-compose.ymlghi:

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

Đó là nó. Bây giờ, defaultmạng sẽ được sử dụng và nếu VPN của bạn không gán cho bạn thứ gì đó từ 172.16.57.*mạng con, bạn vẫn ổn.


2
Điều đó thật tuyệt! Hộp máy chủ của tôi không thể đứng mà không có OpenVPN vì vậy những lời khuyên về việc vô hiệu hóa (thậm chí tạm thời) là vô nghĩa đối với tôi.
iBug

4
đây phải là câu trả lời được chấp nhận, vì đơn giản việc giết VPN là ngu ngốc
michnovka

Không phải là 172.177.57.0/24 một newtork đã định tuyến? Nếu vậy, nó có thể gây ra vấn đề liên hệ với một số lượng hạn chế của máy chủ lưu trữ trên internet.
dstromberg

1
vâng, một trục trặc ở đây. Sẽ tốt hơn nếu sử dụng một từ 172.16.*.*mạng con
Arenim

Tôi không nghĩ rằng sử dụng 172.177.57.*là một ý tưởng hay, bởi vì nó không có trong en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses . Sử dụng địa chỉ trong phạm vi này.
lucidyan

53

Theo lời bình luận của Peter Hauge , khi chạy tôi đã thấy (trong số các dòng khác) như sau:docker network ls

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

Dòng với NAMEDRIVERnhư cả hai hostdường như là những gì anh ấy đang đề cập đến với "các mạng đã được tạo trên máy chủ của bạn". Vì vậy, sau https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 , tôi đã chạy lệnh

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

Bây giờ docker-compose uphoạt động (mặc dù newnym.pytạo ra một lỗi).


8
Không hoạt động trong các phiên bản docker gần đây hơn - họ đã không cho phép xóa các mạng tích hợp (chẳng hạn như default)
pospi

Nếu bạn đang sử dụng Traefik, hãy đảm bảo tắt thùng chứa đó trước khi chạy lệnh này. Nếu không, nó sẽ nghĩ rằng tất cả các mạng của bạn đang hoạt động.
Giải pháp web Allure

nếu tôi chạy, docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')tôi nhận được Error response from daemon: bridge is a pre-defined network and cannot be removedtrên Ubuntu Docker version 19.03.9, build 9d988398e7 docker-compose version 1.25.0, build unknown
20.04

47

Tôi có cùng một vấn đề. Tôi chạy docker system prune -a --volumes, docker network prunenhưng không giúp tôi.

Tôi sử dụng VPN, tôi tắt VPN và sau khi docker bắt đầu bình thường và có thể tạo một mạng. Sau đó, bạn có thể kích hoạt lại VPN.


3
Kết nối VPN của tôi nằm trên cùng một mạng con với một docker đang cố sử dụng. Ngắt kết nối đã giải quyết vấn đề cho tôi. :)
XtraSimplility

1
ahhhVPN đã chạy.
Adiii

25

Như các câu trả lời khác đã đề cập, bridgemạng cục bộ mặc định của Docker chỉ hỗ trợ 30 mạng khác nhau (mỗi mạng được xác định duy nhất bằng tên của họ). Nếu bạn không sử dụng chúng, thì docker network prunesẽ thực hiện thủ thuật.

Tuy nhiên, bạn có thể quan tâm đến việc thiết lập hơn 30 container, mỗi container có mạng riêng. Nếu bạn quan tâm đến việc đó thì bạn sẽ cần xác định một overlaymạng. Đây là một chút khó khăn hơn nhưng tài liệu cực kỳ tốt ở đây .

EDIT (tháng 5 năm 2020): Liên kết đã trở nên không khả dụng, thông qua các tài liệu không có sự thay thế chính xác, nhưng tôi khuyên bạn nên bắt đầu từ đây .


Liên kết của bạn là 404
chovy

@chovy cảm ơn vì đã cho tôi biết, họ đã tổ chức lại tài liệu của họ. Cập nhật ngay.
Carlos Segarra

13

Tôi gặp vấn đề giống hệt với cùng một thông báo lỗi nhưng giải pháp loại bỏ các mạng docker không sử dụng đã không giúp tôi. Tôi đã xóa tất cả các mạng docker không mặc định (cũng như tất cả các hình ảnh và container) nhưng điều đó không có ích - docker vẫn không thể tạo một mạng mới.

Nguyên nhân của vấn đề là ở các giao diện mạng còn sót lại sau khi cài đặt OpenVpn. (Nó đã được cài đặt trên máy chủ trước đó.) Tôi tìm thấy chúng bằng cách chạy ifconfiglệnh:

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

Tôi thấy rằng tôi có thể loại bỏ chúng bằng một vài lệnh:

ip link delete tun0
ip link delete tun1

Sau đó, vấn đề đã biến mất.


Điều này làm việc cho tôi sau khi thử một số tùy chọn - dừng openvpn, khởi động lại máy tính, cài đặt lại docker, cắt tỉa mạng, v.v ...
Matt

10
  1. Kiểm tra xem có container nào khác đang chạy không, Nếu có, hãy làm: docker-compose down
  2. Nếu VPN được kết nối, sau đó ngắt kết nối và thử lại để tải lên docker container:

    docker-compose up -d container_name

Tôi không có VPN nào đang chạy nhưng đã docker-compose downsửa nó cho tôi
IMB

8

Bạn co thể thử

$sudo service network-manager restart

Đã làm cho tôi.


Làm việc cho tôi quá!
mmrs151

8

Tôi gặp vấn đề tương tự, lý do tại sao bạn đạt đến mức tối đa của các mạng:

làm một: docker network ls Chọn một để loại bỏ bằng cách sử dụng:docker network rm networkname_default


6

Điều này xảy ra với tôi bởi vì tôi đang sử dụng OpenVPN. Tôi đã tìm thấy một cách mà tôi không cần phải ngừng sử dụng VPN hoặc tự thêm mạng vào tệp soạn thảo docker cũng như không chạy bất kỳ tập lệnh điên rồ nào.

Tôi chuyển sang WireGuardthay vì OpenVPN. Cụ thể hơn, khi tôi đang chạy giải pháp nordvpn, tôi đã cài đặt WireGuard và sử dụng phiên bản của nó, NordLynx.


Lệnh cụ thể để chuyển từ OpenVPN sang giao thức WireGuard cho NordVPN là nordvpn set technology NordLynx. Nó không phải là một sản phẩm riêng biệt và hiện chỉ có sẵn trên Linux & iOS.
Tephyr

6

Giết vpn là không cần thiết.

Nhận xét khác về việc sử dụng một mạng mới khá gần với giải pháp cho tôi và đã hoạt động được một thời gian, nhưng tôi đã tìm thấy một cách tốt hơn nhờ một số cuộc thảo luận trong một câu hỏi khác

Tạo một mạng với:

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

Sau đó, ở dưới cùng của docker-compose.yaml, đặt cái này:

networks:
  default:
    external: 
      name: your-network

Làm xong. Không cần thêm mạng vào tất cả các định nghĩa vùng chứa, v.v. và bạn có thể sử dụng lại mạng với các tệp soạn thảo docker khác nếu bạn muốn.


6

TL; DR

Thêm vào

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

Đọc về network_modetài liệu .

Phiên bản dài

Tuyên bố miễn trừ trách nhiệm : Tôi không rành về mạng Docker, nhưng điều này đã giúp tôi rất nhiều. YMMV.

Khi tôi chạy docker run my-imagemạng, tôi không gặp vấn đề gì, nhưng khi tôi chuyển đổi lệnh này thành một docker-compose.ymltệp, tôi đã gặp lỗi tương tự như OP.

Tôi đọc câu trả lời của Arenim và một số nội dung khác trên internet có đề xuất sử dụng lại mạng hiện có.

Bạn có thể tìm thấy các mạng hiện có như thế này:

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

Tôi muốn sử dụng lại bridgemạng mặc định , vì vậy tôi đã thêm

services:
  web:
    ...

networks:
  default:
    external:
      name: bridge

đến gốc của tôi docker-compose.yml(vì vậy không phải bên trong một trong những của tôi services, mà là ở chỗ thụt gốc).

Bây giờ tôi đã gặp lỗi sau:

LRI: đối với bí danh trong phạm vi mạng container của bạn chỉ được hỗ trợ cho các vùng chứa trong các mạng do người dùng xác định

Điều này đã dẫn đến vấn đề Docker Github này , nói rõ rằng tôi nên thêm network_modeđối tượng vào docker-compose:

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

Tôi đã sử dụng phiên bản Docker 18.09.8, docker-composephiên bản 1.24.1và định dạng tệp soạn thảo 3.7.


1
Đây là một câu hỏi hoặc một câu trả lời?
chovy

Thêm một: cuộc phiêu lưu của tôi ở vùng đất mạng Docker và cách tôi vấp phải thứ gì đó bị mắc kẹt.
Stefan van den Akker

4

Nếu bạn muốn có nhiều mạng thì bạn có thể kiểm soát số lượng docker không gian IP trao cho mỗi mạng thông qua default-address-poolscài đặt deamon, vì vậy bạn có thể thêm điều này vào /etc/docker/daemon.json:

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

Ở đây tôi đã dành riêng 10.254.1.1/24(254 địa chỉ IP) cho mạng cầu.

Đối với bất kỳ mạng nào khác tôi tạo, docker sẽ phân vùng 10.254.0.0không gian (65k máy chủ), đưa ra 16 máy chủ cùng một lúc ( "size":28tham khảo mặt nạ CIDR , cho 16 máy chủ).

Nếu tôi tạo một vài mạng và sau đó chạy docker network inspect <name>trên chúng, nó có thể hiển thị một cái gì đó như thế này:

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

10.254.0.32/28nghĩa là mạng này có thể sử dụng 16 địa chỉ IP từ10.254.0.32 - 10.254.0.47.


1

Tôi gặp vấn đề tương tự

Tạo mạng "schemaregistry1_default" với trình điều khiển mặc định
ERROR: không thể tìm thấy nhóm địa chỉ IPv4 có sẵn, không chồng chéo trong số các mặc định để gán cho mạng

và không có gì giúp được cho đến khi tôi tắt Cisco VPN. sau đó docker-compose lên làm việc


-3

Tôi đã khắc phục vấn đề này bằng các bước:

  1. tắt mạng của bạn (không dây hoặc có dây ...).

  2. Khởi động lại hệ thống của bạn.

  3. trước khi bật mạng của bạn trên PC, hãy thực thi lệnh docker-compose, nó sẽ tạo ra mạng mới.

  4. sau đó bạn có thể bật mạng và tiếp tục ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.