У меня есть каталог 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
IS
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
Я попытался найти справку по этому сообщению об ошибке, но не смог ее найти. Что вызывает эту ошибку?
python
docker
docker-compose
Курт Пик
источник
источник
docker ps
показывает, что контейнеры не запущены.docker network ls
и подтвердить, если сети уже созданы на вашем хосте.docker network prune
, Это решит вашу проблемуОтветы:
Я видел, что предполагается, что докер может быть на максимуме созданных сетей. Команду
docker network prune
можно использовать для удаления всех сетей, не используемых хотя бы одним контейнером.Моя проблема закончилась тем, что, как прокомментировал Роберт, проблема с openvpn
service openvpn stop
«решила» проблему.источник
Docker system prune
Это также может быть исправлением, но, пожалуйста, будьте осторожны, это может удалить вашу БД, используйте ее, только если вы не заботитесь о вашей БД, или если ваш контейнер БД работает, тогда эта команда безопасна, поскольку она только удаляет ненужные вещи по крайней мере, на один контейнер.Я столкнулся с этой проблемой, потому что у меня был запущен OpenVPN. Как только я убил OpenVPN,
docker-compose up
загорелся и ошибка исчезла.источник
redirect-gateway def1
чтобы обойти проблему, не убивая мой сервис openvpn.Я столкнулся с этой проблемой, когда OpenVPN работал, и я нашел решение, в котором вы НЕ должны останавливать / запускать сервер OpenVPN.
Идея в том, что вы должны указать, какую именно подсеть вы хотите использовать. В
docker-compose.yml
записи:Вот и все. Теперь
default
сеть будет использоваться, и если ваш VPN не назначил вам что-то из172.16.57.*
подсети, все в порядке.источник
172.16.*.*
подсети172.177.57.*
это хорошая идея, потому что это не в en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses . Используйте адреса в этом диапазоне.После Питера Hauge «сек комментарий , после запуска
docker network ls
я увидел , (среди других линий) в следующих ситуациях :Строка с
NAME
иDRIVER
как оба,host
кажется, то, что он имеет в виду с "сетями, уже созданными на вашем хосте". Итак, следуя https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 , я выполнил командуСейчас
docker-compose up
работает (хотяnewnym.py
выдает ошибку).источник
default
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
Ubuntu 20.04Docker version 19.03.9, build 9d988398e7
docker-compose version 1.25.0, build unknown
У меня та же проблема. Я побежал
docker system prune -a --volumes
,docker network prune
но ни один не помог мне.Я использую VPN, я отключил VPN и, после того, как Docker запустился нормально и смог создать сеть. После этого вы можете снова включить VPN.
источник
Как уже упоминалось в других ответах, локальная
bridge
сеть Docker по умолчанию поддерживает только 30 различных сетей (каждая из которых уникально идентифицируется по имени). Если вы их не используете, тоdocker network prune
сработает.Однако вас может заинтересовать создание более 30 контейнеров, каждый со своей сетью. Если вы заинтересованы в этом, вам нужно будет определить
overlay
сеть. Это немного сложнее, но очень хорошо задокументировано здесь .РЕДАКТИРОВАТЬ (май 2020 г.): ссылка стала недоступной, просматривая документы, нет точной замены, но я бы рекомендовал начать отсюда .
источник
У меня была идентичная проблема с тем же сообщением об ошибке, но решение по удалению неиспользуемых сетей докеров мне не помогло. Я удалил все докерские сети не по умолчанию (а также все изображения и контейнеры), но это не помогло - докер все еще не смог создать новую сеть.
Причиной проблемы были сетевые интерфейсы, которые остались после установки OpenVpn. (Он был установлен на хосте ранее.) Я нашел их, выполнив
ifconfig
команду:Я обнаружил, что могу удалить их с помощью нескольких команд:
После этого проблема исчезла.
источник
docker-compose down
Если VPN-соединение подключено, отключите его и попробуйте снова подключить Docker-контейнер:
источник
docker-compose down
исправил этоМожешь попробовать
Работал на меня.
источник
Я столкнулся с той же проблемой, причина в том, что вы достигли максимума сетей:
do an:
docker network ls
Выберите один, чтобы удалить, используя:docker network rm networkname_default
источник
TL; DR
Добавить
Читайте об этом
network_mode
в документации .Длинная версия
Отказ от ответственности : я не очень хорошо разбираюсь в сетевых технологиях Docker, но это помогло мне. YMMV.
Когда я запускал
docker run my-image
сеть, у меня не было проблем, но когда я преобразовал эту команду вdocker-compose.yml
файл, я получил ту же ошибку, что и OP.Я прочитал ответ Аренима и некоторые другие материалы в Интернете, которые предлагали повторно использовать существующую сеть.
Вы можете найти существующие сети как это:
Я хотел повторно использовать
bridge
сеть по умолчанию , поэтому я добавилдо корня моего
docker-compose.yml
(так что не внутри одного из моихservices
, но в корне отступа).Теперь я получил следующую ошибку:
Это привело к решению проблемы Docker Github , в которой прямо говорилось, что я должен добавить
network_mode
объект в мойdocker-compose
:Я использовал версию Docker
18.09.8
,docker-compose
версию1.24.1
и формат файла композиции3.7
.источник
Это случилось со мной, потому что я использовал
OpenVPN
. Я нашел способ, при котором мне не нужно прекращать использование VPN, вручную добавлять сеть в файл docker-compose и не запускать какие-либо сумасшедшие сценарии.Я переключился на
WireGuard
вместоOpenVPN
. Более конкретно, поскольку я использую решение nordvpn, я установил WireGuard и использовал их версию NordLynx.источник
nordvpn set technology NordLynx
. Это не отдельный продукт, и в настоящее время доступен только для Linux и iOS.Убийство впн не нужно.
Этот другой комментарий об использовании новой сети довольно близок к решению для меня , и работал некоторое время, но я нашел лучший путь благодаря некоторому разговору в другом вопросе
Создайте сеть с:
Затем в нижней части docker-compose.yaml поместите это:
Готово. Нет необходимости добавлять сети ко всем определениям контейнеров и т. Д., При желании вы можете повторно использовать сеть с другими файлами docker-compose.
источник
Если вам нужно много сетей, то вы можете контролировать, сколько Docker пространства IP-адресов раздает каждой сети через
default-address-pools
настройку deamon, так что вы можете добавить это в ваш/etc/docker/daemon.json
:Здесь я зарезервировал
10.254.1.1/24
(254 IP-адреса) для сети моста.Для любой другой сети, которую я создаю, docker разделит
10.254.0.0
пространство (65 тыс. Хостов), выдавая 16 хостов одновременно ("size":28
относится к маске CIDR , для 16 хостов).Если я создаю несколько сетей и затем запускаю
docker network inspect <name>
их, это может отобразить что-то вроде этого:Это
10.254.0.32/28
означает, что эта сеть может использовать 16 IP-адресов от10.254.0.32
-10.254.0.47
.источник
Я столкнулся с той же проблемой
При создании сети "schemaregistry1_default" с драйвером по умолчанию
ОШИБКА: не удалось найти доступный неперекрывающийся пул адресов IPv4 среди значений по умолчанию, назначаемых сети
и ничего не помогало, пока я не выключил Cisco VPN. после этого работал docker-compose
источник
Я исправил эту проблему по шагам:
выключите вашу сеть (беспроводную или проводную ...).
перезагрузите вашу систему.
перед включением сети на ПК выполните команду docker-compose, она собирается создать новую сеть.
тогда вы можете включить сеть и продолжить ...
источник