Docker "ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network"

У меня есть каталог 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 предназначена для простой проверки того, работает ли смена IP-адреса с помощью Tor:

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

Я пытался найти помощь по этому сообщению об ошибке, но не смог ничего найти. Что вызывает эту ошибку?

Комментарии к вопросу (14)

Я встречал предположение, что docker может достичь максимума созданных сетей. Команда docker network prune может быть использована для удаления всех сетей, не используемых хотя бы одним контейнером.

Моя проблема оказалась, как прокомментировал Robert: проблема с openvpn service openvpn stop 'решила' проблему.

Комментарии (7)

Я столкнулся с этой проблемой, потому что у меня есть OpenVPN работает. Как только я убил OpenVPN и `Докер-сочинять вверх выстрелил прямо вверх, и ошибка исчезла.

Комментарии (9)
Решение

После Peter Hauge'комментария](https://stackoverflow.com/questions/43720339/docker-error-could-not-find-an-available-non-overlapping-ipv4-address-pool-am#comment74485284_43720339), запустив 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 выдает ошибку).

Комментарии (3)

У меня такая же проблема. Я проверил настройки системы слива -а --томах,настройки сети чернослива, но оба мне не помог. Я пользуюсь VPN, я выключаю VPN и, после этого, докер начал нормально и он может создать сеть. В конце концов, вы можете снова включить VPN

Комментарии (2)

Я бежал в эту проблему с OpenVPN работает, как хорошо, и я'вэ нашел решение куда не следует стоп/старт сервера OpenVPN.

Идея, что вы должны указать, какие именно подсети, которые вы хотите использовать. В докер-сочинять.в формате YML` пишут:

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

Что's оно. Сейчас, "по умолчанию" сеть будет использоваться и если VPN не назначил вам что-то из 172.177.57.* подсети вы'ре хорошо.

Комментарии (2)

Как и другие ответы упомянули, Докер'ы по умолчанию сети местной "мост" поддерживает только 30 разных сетях (каждый из них уникальным образом идентифицируются по их имени). Если вы не используете их, то сетевые настройки чернослив будет делать трюк.

Однако, вы могли бы быть заинтересованы в создании более 30 контейнеров, каждый с их собственной сети. Вы были заинтересованы в этом, то вы должны определить наложения сети. Это немного сложнее, но очень хорошо документирован здесь.

Комментарии (0)

У меня была идентичная проблема с тем же сообщением об ошибке, но решение с удалением неиспользуемых сетей docker мне не помогло. Я'удалил все неиспользуемые по умолчанию сети docker (а также все образы и контейнеры), но это не помогло - docker по-прежнему не мог создать новую сеть.

Причина проблемы была в сетевых интерфейсах, которые остались после установки OpenVpn. (Он был установлен на хосте ранее.) Я нашел их, выполнив команду 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

После этого проблема исчезла.

Комментарии (2)
  1. Проверьте, если любой другой контейнер работает, если да, то: докер-сочинять вниз
  2. Если VPN подключен, то отключите его и попробуйте снова до контейнера Docker:

докер-сочинять до -д имя контейнера

Комментарии (0)

Вы можете попробовать

$sudo service network-manager restart

Работал для меня.

Комментарии (0)

Я обнаружил ту же проблему, причина заключается в том, что вы достигли максимального сетей:

делать : сетевые настройки ЛС Выбрать один, чтобы удалить с помощью: сеть докер РМ networkname_default`

Комментарии (0)

Это случилось со мной, потому что я был через Интернета. Я нашел способ, что я Дон'т должны прекратить использование VPN или вручную добавить сеть в докер-сочинять и выполнить любой бредовый сценарий.

Я перешла на WireGuard вместо интернета. Более конкретно, как я бегу решения nordvpn, я установил WireGuard и использовать их версию, NordLynx.

Комментарии (0)

МНОГАБУКАФ.

Добавить

в формате YML версия: фильм "3.7"и услуги: веб-сайт: ... network_mode: "У Моста"и

Читать о network_mode в документации.

Длинная версия

** Отказ: я не очень хорошо осведомлен о сетевых настройки так на "решение", что работал для меня, как волшебное заклинание, и YMMV.

Когда я побежал докер запустить мой образ в сети дал мне никаких проблем, но когда Я принял эту команду в докер-сочинять.файл YML`, я получил ту же ошибку как ОП.

Я читал Arenim'ы ответ и некоторые другие вещи в интернете, которые предложил повторно использовать существующую сеть.

Вы можете найти существующий такой сети:

в ``

докер сети Общ

ИДЕНТИФИКАТОР СЕТИ НАЗВАНИЕ ОБЛАСТИ ВОДИТЕЛЬ ca0415dfa442 мост местные 78cbbda034dd host хост локальный 709f13f4ce2d нет нуль местных ``

Я хотела использовать сеть по умолчанию "мост", поэтому я добавил

``в формате YML услуги: веб-сайт: ...

сетях: по умолчанию: внешние: название: Мост ``

на root моего `докер-сочинять.в формате YML (чтобы не внутри одной из моих "услуги", но в корне вмятины).

Сейчас я получаю следующую ошибку:

ошибка: для вашего-контейнер сетевого уровня псевдоним поддерживается только для контейнеры в пользовательских сетях

Это привело встретились, чтобы этот Докер на GitHub вопрос, что прямо указано что я должен добавить network_mode объект моего докер-сочинять:

в формате YML версия: фильм "3.7"и услуги: веб-сайт: ... network_mode: "У Моста"и

Я использую Докер версии 18.09.8, докер-сочинять версии 1.24.1 и создать файл формата3.7`.

Комментарии (0)

Я исправила эту проблему по шагам :

  1. выключить вашей сети (беспроводной или проводной...).

  2. перезагрузите систему.

  3. перед включением сети на ПК, выполнение команды докер-сочинять, это'ы намерены создать новую сеть.

  4. затем вы можете включить сеть и перейти на ...

Комментарии (0)