web-dev-qa-db-ja.com

"エラー:ネットワークに割り当てるためのデフォルトの中で利用可能な、重複しないIPv4アドレスプールを見つけることができませんでした"

次のような構造のディレクトリ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

Dockerfiletorは、次のとおりです。

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は2行で構成されています。

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

そしてDockerfilescraperは、

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

ここでrequirements.txtは単一行requestsを含みます。最後に、プログラムnewnym.pyは、Torを使用してIPアドレスを変更することがうまくいっているかどうかを単純にテストするように設計されています。

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 __== '__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

このエラーメッセージでヘルプを探してみましたが、見つかりませんでした。このエラーの原因は何ですか?

64
Kurt Peek

フォロー Peter Hauge 's コメントdocker network lsを実行すると(他の行の中でも)次のようになりました。

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

両方のNAMEとしてDRIVERHostを含む行は、「あなたのホスト上に既に作成されたネットワーク」で彼が言及しているもののようです。だから、 https://Gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b4 に従って、私はコマンドを実行しました

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

docker-compose upは動作します(ただし、newnym.pyはエラーを生成します)。

40
Kurt Peek

私はそれがdockerが作成されたネットワークの最大であるかもしれないことを示唆したのを見ました。コマンドdocker network Pruneは、少なくとも1つのコンテナーによって使用されていないすべてのネットワークを削除するために使用できます。

Robert がコメントしたように、私の問題は結局結局終わりました:openvpn service openvpn stopに関する問題は問題を '解決'しました。

131
bbeecher

OpenVPNを実行していたため、この問題に遭遇しました。私がOpenVPNを殺した途端に、docker-compose upが正しく起動し、エラーが消えました。

94
DrDamnit

私は同じ問題を抱えています。私はdocker system Prune -a --volumesdocker network Pruneを実行しました、しかしどちらも私を助けませんでした。
私はVPNを使用しています、私はVPNをオフにします、そしてそれの後で、dockerは普通に始めました、そして、彼はネットワークを作ることができます。結局のところ、あなたは再びVPNを有効にすることができます

20
madjardi

他の答えが述べたように、Dockerのデフォルトのローカルのbridgeネットワークは30の異なるネットワーク(それぞれが名前によって一意に識別可能)をサポートするだけです。あなたがそれらを使っていないのなら、docker network Pruneがうまくいくでしょう。

ただし、それぞれが独自のネットワークを持つ、30を超えるコンテナを確立することに興味があるかもしれません。そうすることに興味があるならば、あなたはoverlayネットワークを定義する必要があるでしょう。これはもう少し注意が必要ですが、非常によく文書化されています ここ

9
Carlos Segarra
  1. 他のコンテナーが実行されているかどうかを確認し、実行されている場合は、次の手順を実行します。docker-compose down
  2. VPNが接続されている場合は、それを切断して再度docker containerを起動します。

    docker-compose up -d container_name
    
8

あなたが試すことができます

$Sudo service network-manager restart

私のために働きました。

6
Ivan Mishur

私は同じエラーメッセージと同じ問題を抱えていたが、未使用の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

この後、問題は解決しました。

6
Rara

私はあなたがネットワークの最大値に達したという理由で、同じ問題を助長しました。

docker network lsを使用して削除するものを選択してください:docker network rm networkname_default

3
Amine Benkeroum

私はOpenVPNも同様に動作してこの問題に遭遇しました、そして私はあなたがOpenVPNサーバーを停止/起動してはいけない解決策を見つけました。

どのサブネットを使用するのかを正確に指定する必要があります。 docker-compose.ymlに次のように書いてください。

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

それでおしまい。今、defaultネットワークが使用され、あなたのVPNが172.177.57.*サブネットから何かをあなたに割り当てていないのであれば大丈夫です。

2
Arenim

私は段階的にこの問題を修正しました:

  1. ネットワークをオフにします(無線または有線...)。

  2. システムを再起動してください。

  3. pCのネットワークをオンにする前に、コマンドdocker-compose upを実行して、新しいネットワークを作成します。

  4. それからあなたはネットワークをオンにしてオンにすることができます...

0
salim