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


154

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で、2行で構成されます

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

そして、DockerfileのためのscraperIS

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

requirements.txtは1行が含まれます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 __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

このエラーメッセージについてヘルプを検索しようとしましたが、何も見つかりませんでした。このエラーの原因は何ですか?


1
いいえ、docker ps実行中のコンテナはありません。
カートピーク2017年

77
VPNを接続していますか?また、コンピュータを再起動してみましたか?(私はグーグルしています)github.com/moby/moby/issues/30295
Robert

3
docker network lsホストでネットワークがすでに作成されているかどうかを確認してみてください。
Peter Hauge

1
@Robertに感謝PIA VPNを実行していて、いったん切断して終了すると、動作しました。
xx1xx 2017

15
docker network prune。これで問題が解決します
Jinna Balu

回答:


275

dockerが作成されたネットワークの最大数である可能性があることを示唆しているのを見ました。このコマンドdocker network pruneを使用して、少なくとも1つのコンテナで使用されていないすべてのネットワークを削除できます。

Robertがコメントしたように、私の問題は結局、openvpn service openvpn stopの問題で問題が「解決」されました。


10
ここでvpnと一緒にdockerを実行する必要がある場合、可能な解決策は次のとおりです:stackoverflow.com/q/45692255/7918
jb。

45
OpenVPNサービスが私の問題でした。
Liviu Ilea

上記の回答に追加して、このような剪定のような問題が発生した場合、システムは本当に役立ちます。Docker system prune修正することもできますが、注意してください。DBが削除される可能性があります。DBを気にしない場合にのみ使用してください。または、DBコンテナが実行されている場合は、このコマンドは使用されていないものを削除するだけなので安全です少なくとも1つのコンテナ。
Sweet Chilly Philly

ありがとう。openvpnクライアントを停止することが機能することを確認します。私はそれを数日前に開始しましたが、今日docker-composeを実行したところ、そのエラーが発生しました。
Dat TT

1
私たちのツールが有用なデバッグ情報を提供する生活を想像してみてください。
ダミアンロシュ

157

OpenVPNを実行していたため、この問題に遭遇しました。OpenVPNを強制終了するとdocker-compose upすぐに起動し、エラーは消えました。


9
別のVPNプロバイダー(expressvpn)でも同じです。
2018

1
OpenVPNの実行に関する同じ問題
Nicolai

6
だから私は同じ問題があり、なぜこれが起こっているのか疑問に思っています。VPNに接続するとDockerネットワークが混乱するのはなぜですか?
David Ficociello、

2
プライベートインターネットアクセスでも同じ問題が発生しました
ニコラス

1
redirect-gateway def1openvpnサービスを終了せずに問題を回避するのではなく、ルートを追加しました。
Douglas Liu

59

私はOpenVPNも同様に機能するこの問題に遭遇し、OpenVPNサーバーを停止/開始してはならない解決策を見つけました。

使用するサブネットを正確に指定する必要があるという考え。ではdocker-compose.yml、書き込み:

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

それでおしまい。これでdefaultネットワークが使用され、VPNが172.16.57.*サブネットから何かを割り当てなかった場合は問題ありません。


2
これは素晴らしい!私のサーバーボックスはOpenVPNなしでは我慢できないので、VPNを無効にすることについてのアドバイスは(たとえ一時的にであっても)すべて意味がありません。
iBug

4
これは単にVPNは愚かで殺すよう、受け入れ答えなければなりません
michnovka

172.177.57.0/24はルーティングされたニュートルクではありませんか?その場合、インターネット上の限られた数のホストへの接続で問題が発生する可能性があります。
dstromberg

1
うん、ここでグリッチ。172.16.*.*サブネットの1つを使用した方がよい
Arenim

en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses172.177.57.*にはないので、使用することは良い考えではないと思います。この範囲内のアドレスを使用してください。
ルシディアン

53

Peter Haugeコメントに続いて、実行する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、エラーが発生します)。


8
最近のdockerバージョンでは機能しませんdefault
組み込み

Traefikを使用している場合は、このコマンドを実行する前にそのコンテナをシャットダウンしてください。それ以外の場合は、すべてのネットワークがアクティブであると見なされます。
アリュールWebソリューション

実行する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
therobyouknow

47

私は同じ問題を抱えています。私は走っていないdocker system prune -a --volumesdocker network pruneしかし、どちらも私を助けました。

私はVPNを使用していますが、VPNをオフにし、Dockerが正常に起動してネットワークを作成できました。その後、VPNを再度有効にできます。


3
私のVPN接続は、Dockerが使用しようとしたサブネットと同じサブネット上にありました。切断することで問題は解決しました。:)
XtraSimplicity 2018

1
ahhhVPNが実行されていました。
Adiii

25

他の回答が述べたように、Dockerのデフォルトのローカルbridgeネットワークは30の異なるネットワークのみをサポートします(それぞれのネットワークは名前で一意に識別可能)。それらを使用していない場合は、docker network pruneは、トリックを行います。

ただし、それぞれが独自のネットワークを持つ30を超えるコンテナーの確立に関心がある場合があります。そうすることに興味があったら、overlayネットワークを定義する必要があります。これはもう少しトリッキーですが、非常によくここに文書化されています

編集(2020年5月):リンクが利用できなくなりました。ドキュメントを確認すると、正確な置き換えはありませんが、ここから始めることをお勧めします


あなたのリンクは404です
chovy

@chovy教えてくれてありがとう、彼らはドキュメントを再編成しました。今更新しています。
カルロスセガラ

13

同じエラーメッセージで同じ問題が発生しましたが、未使用の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

この後、問題は消えました。


これは、openvpnの停止、PCの再起動、Dockerの再インストール、ネットワークプルーンなどのいくつかのオプションを試した後、私にとってはうまくいきました
Matt

10
  1. 他のコンテナが実行されているかどうかを確認し、実行されている場合は次のようにします。 docker-compose down
  2. VPNが接続されている場合は、VPNを切断して、Dockerコンテナーを再起動します。

    docker-compose up -d container_name

VPNを実行していdocker-compose downませんが、修正しました
IMB


8

私は同じ問題を見つけました、その理由はあなたがネットワークの最大に達したということです:

実行:docker network ls 削除するものを1つ選択してください。docker network rm networkname_default


7

TL; DR

追加

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

network_modeドキュメントで読む

ロングバージョン

免責事項:私はDockerネットワーキングについてはあまり詳しくありませんが、これでうまくいきました。YMMV。

docker run my-imageネットワークを実行したところ問題はありませんでしたが、このコマンドをdocker-compose.ymlファイルに変換すると、OPと同じエラーが発生しました。

私は、既存のネットワークを再利用することを提案したインターネット上のArenimの回答やその他のものを読みました

次のような既存のネットワークを見つけることができます。

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

デフォルトのbridgeネットワークを再利用したかったので、

services:
  web:
    ...

networks:
  default:
    external:
      name: bridge

私のルートdocker-compose.yml(つまり、私のの内部では servicesなく、ルートのインデントに)。

次のエラーが発生しました:

エラー:コンテナーのネットワークスコープのエイリアスは、ユーザー定義ネットワークのコンテナーでのみサポートされています

これにより、このDocker Githubの問題が発生し、network_modeオブジェクトをmyに追加する必要があることが明記されましたdocker-compose

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

私はDockerバージョン18.09.8docker-composeバージョン1.24.1、および構成ファイル形式を使用していました3.7


1
これは質問ですか、それとも回答ですか。
午後6

詳細a:私のDockerネットワークランドでの冒険と、行き詰まったものに遭遇した方法。
Stefan van den Akker

6

これは私が使っていたために起こりました OpenVPN。VPNの使用を停止したり、手動でネットワークをdocker-composeファイルに追加したり、クレイジースクリプトを実行したりする必要がない方法を見つけました。

WireGuard代わりに切り替えましたOpenVPN。具体的には、nordvpnソリューションを実行しているときに、WireGuardをインストールして、そのバージョンであるNordLynxを使用しました。


OpenVPNからNordVPNのWireGuardプロトコルに切り替える特定のコマンドは、nordvpn set technology NordLynxです。これは個別の製品ではなく、現在LinuxおよびiOSでのみ利用可能です。
テファー

6

VPNを強制終了する必要はありません。

新しいネットワークの使用に関するこの他のコメントは、私にとって解決策にかなり近くなり、しばらくの間働いていましたが、別の質問でいくつかの話し合いのおかげでより良い方法を見つけました

以下を使用してネットワークを作成します。

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

次に、docker-compose.yamlの下部に次のように配置します。

networks:
  default:
    external: 
      name: your-network

できました。すべてのコンテナー定義などにネットワークを追加する必要はありません。必要に応じて、他のdocker-composeファイルでもネットワークを再利用できます。


4

多数のネットワークが必要な場合は、default-address-poolsデーモン設定を介してIPスペースDockerが各ネットワークに渡す量を制御できるため、これをに追加できます/etc/docker/daemon.json

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

ここでは10.254.1.1/24、ブリッジネットワーク用に予約しました(254個のIPアドレス)。

私が作成する他のネットワークの場合、10.254.0.0docker はスペース(65kホスト)を分割し、一度に16ホストを割り当てます(16ホスト"size":28CIDRマスクを参照)。

いくつかのネットワークを作成して実行docker network inspect <name>すると、次のように表示される場合があります。

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

10.254.0.32/28このネットワークから16のIPアドレスを使用できることを意味します10.254.0.32- 10.254.0.47


1

私は同じ問題に遭遇しました

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

そして、私がCisco VPNをオフにするまで何も助けにはならなかった。その後、docker-compose upが機能しました


-3

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

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

  2. システムを再起動します。

  3. PCでネットワークをオンにする前に、コマンドdocker-compose upを実行すると、新しいネットワークが作成されます。

  4. 次に、ネットワークをオンにして続行できます...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.