У меня есть каталог 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
Я пытался найти помощь по этому сообщению об ошибке, но не смог ничего найти. Что вызывает эту ошибку?
Я встречал предположение, что docker может достичь максимума созданных сетей. Команда docker network prune
может быть использована для удаления всех сетей, не используемых хотя бы одним контейнером.
Моя проблема оказалась, как прокомментировал Robert: проблема с openvpn service openvpn stop
'решила' проблему.
После 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
выдает ошибку).
У меня такая же проблема. Я проверил настройки системы слива -а --томах,
настройки сети чернослива, но оба мне не помог.
Я пользуюсь VPN, я выключаю VPN и, после этого, докер начал нормально и он может создать сеть. В конце концов, вы можете снова включить VPN
Я бежал в эту проблему с OpenVPN работает, как хорошо, и я'вэ нашел решение куда не следует стоп/старт сервера OpenVPN.
Идея, что вы должны указать, какие именно подсети, которые вы хотите использовать. В докер-сочинять.в формате YML` пишут:
networks:
default:
driver: bridge
ipam:
config:
- subnet: 172.177.57.0/24
Что's оно. Сейчас, "по умолчанию" сеть будет использоваться и если VPN не назначил вам что-то из 172.177.57.*
подсети вы'ре хорошо.
Как и другие ответы упомянули, Докер'ы по умолчанию сети местной "мост" поддерживает только 30 разных сетях (каждый из них уникальным образом идентифицируются по их имени). Если вы не используете их, то сетевые настройки чернослив будет делать трюк.
Однако, вы могли бы быть заинтересованы в создании более 30 контейнеров, каждый с их собственной сети. Вы были заинтересованы в этом, то вы должны определить наложения
сети. Это немного сложнее, но очень хорошо документирован здесь.
У меня была идентичная проблема с тем же сообщением об ошибке, но решение с удалением неиспользуемых сетей 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
После этого проблема исчезла.
докер-сочинять вниз
докер-сочинять до -д имя контейнера
Вы можете попробовать
$sudo service network-manager restart
Работал для меня.
Я обнаружил ту же проблему, причина заключается в том, что вы достигли максимального сетей:
делать : сетевые настройки ЛС
Выбрать один, чтобы удалить с помощью: сеть докер РМ networkname_default`
Это случилось со мной, потому что я был через Интернета
. Я нашел способ, что я Дон'т должны прекратить использование VPN или вручную добавить сеть в докер-сочинять и выполнить любой бредовый сценарий.
Я перешла на WireGuard
вместо интернета
. Более конкретно, как я бегу решения nordvpn, я установил WireGuard и использовать их версию, NordLynx.
Добавить
в формате 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`.
Я исправила эту проблему по шагам :
выключить вашей сети (беспроводной или проводной...).
перезагрузите систему.
перед включением сети на ПК, выполнение команды докер-сочинять, это'ы намерены создать новую сеть.
затем вы можете включить сеть и перейти на ...