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두 줄로 구성 되는 곳

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

그리고 Dockerfilefor 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은 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실행중인 컨테이너가 없습니다.
커트 픽

77
VPN이 연결되어 있습니까? 또한 컴퓨터를 다시 시작해 보셨습니까? (나는 인터넷 검색 중) github.com/moby/moby/issues/30295
Robert

3
docker network ls호스트에 네트워크가 이미 생성되어 있는지 확인하고 시도 할 수 있습니까?
Peter Hauge 17

1
감사합니다 @Robert PIA VPN을 실행 중입니다. 연결을 끊고 종료하면 작동합니다.
xx1xx

15
docker network prune. 이렇게하면 문제가 해결 될 것입니다
Jinna Balu

답변:


276

도 커가 최대 생성 네트워크에 있다고 제안했습니다. 이 명령 docker network prune을 사용하여 하나 이상의 컨테이너에서 사용하지 않는 모든 네트워크를 제거 할 수 있습니다.

Robert 가 다음과 같이 논평 하면서 내 문제는 끝났습니다 : openvpn의 문제는 문제를 service openvpn stop'해결했습니다.


10
VPN과 함께 docker를 실행 해야하는 경우 가능한 해결책은 다음과 같습니다. stackoverflow.com/q/45692255/7918 .
jb.

45
OpenVPN 서비스가 문제였습니다.
Liviu Ilea 2016 년

위의 답변에 추가하려면이 가지 치기와 같은 문제가 발생하면 시스템이 실제로 도움이 될 수 있습니다. Docker system prune또한 수정 일 수 있지만 조심하십시오 .DB를 제거 할 수 있습니다 .DB를 신경 쓰지 않거나 DB 컨테이너가 실행중인 경우에만이 명령을 사용하십시오.이 명령은 사용되지 않는 것을 정리하기 때문에 안전합니다. 적어도 하나의 용기에 의해.
Sweet Chilly Philly

감사. openvpn 클라이언트를 중지하면 작동합니다. 며칠 전에 시작한 후 오늘 docker-compose를 실행하여 오류가 발생했습니다.
Dat TT

1
툴이 유용한 디버깅 정보를 제공하는 삶을 상상해보십시오.
Damien Roche

157

OpenVPN이 실행 중이기 때문에이 문제가 발생했습니다. OpenVPN을 종료하자마자 바로 실행되었으며 docker-compose up오류가 사라졌습니다.


9
다른 VPN 제공 업체 (expressvpn)와 동일합니다.
berkes

1

6
그래서 나는 같은 문제가 있었고 왜 이런 일이 일어나고 있는지 궁금합니다. VPN에 연결할 때 Docker 네트워킹이 혼동되는 이유는 무엇입니까?
David Ficociello 2012 년

2
개인 인터넷 액세스와 동일한 문제가있었습니다
Nicolas

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.*.*서브넷 에서 하나를 사용하는 것이 좋습니다
Arenim

en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses172.177.57.* 에 없기 때문에 사용 하는 것이 좋은 생각 이라고 생각하지 않습니다 . 이 범위 내의 주소를 사용하십시오.
lucidyan

53

다음 피터 Hauge코멘트를 실행시, docker network ls다음 (다른 라인들) I 톱을 :

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

와 라인 NAMEDRIVER양쪽으로는 host그는 "이미 호스트에서 생성 된 네트워크"를 참조 무엇 것으로 보인다. 따라서 https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 다음 에 명령을 실행했습니다.

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

이제 docker-compose up작동합니다 ( newnym.py오류가 발생 하더라도 ).


8
그들은 내장 제거하는 네트워크를 허용 한 버전 - (예 : 최근 고정 표시기에서 작동하지 않습니다 default)
pospi

Traefik을 사용하는 경우이 명령을 실행하기 전에 해당 컨테이너를 종료하십시오. 그렇지 않으면 모든 네트워크가 활성화 된 것으로 생각합니다.
Allure Web Solutions

내가 실행 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우분투 20.04에 도착Docker version 19.03.9, build 9d988398e7 docker-compose version 1.25.0, build unknown
therobyouknow

47

나도 같은 문제가있어. 나는 실행 docker system prune -a --volumes, docker network prune하지만 둘은 나에게 도움이되지 않습니다.

VPN을 사용하고 VPN을 끄고도 커가 정상적으로 시작된 후 네트워크를 만들 수있었습니다. 그런 다음 VPN을 다시 활성화 할 수 있습니다.


3
내 VPN 연결이 하나의도 커가 사용하려고 시도한 것과 동일한 서브넷에있었습니다. 연결을 끊으면 문제가 해결되었습니다. :)
XtraSimplicity

1
ahhhVPN이 실행 중입니다.
Adiii

25

다른 답변에서 언급했듯이 Docker의 기본 로컬 bridge네트워크는 30 개의 서로 다른 네트워크 만 지원합니다 (각각 하나의 이름으로 고유하게 식별 가능). 당신이 그들을 사용 docker network prune하지 않으면, 트릭을 할 것입니다.

그러나 각각 자체 네트워크가있는 컨테이너를 30 개 이상 설정하는 데 관심이있을 수 있습니다. 그렇게하는 데 관심이 있다면 overlay네트워크 를 정의해야 합니다. 이것은 좀 더 까다 롭지 만 여기에 매우 잘 설명되어 있습니다 .

편집 (2020 년 5 월) : 링크를 사용할 수 없게되어 문서를 통해 정확한 교체가 이루어지지는 않지만 여기서 부터 시작하는 것이 좋습니다 .


귀하의 링크는
43 분에

@chovy 감사합니다. 문서를 재구성했습니다. 지금 업데이트 중입니다.
카를로스 세 가라

13

동일한 오류 메시지와 동일한 문제가 있었지만 사용되지 않은 도커 네트워크를 제거하는 솔루션은 도움이되지 않았습니다. 기본이 아닌 도커 네트워크 (및 모든 이미지와 컨테이너도)를 삭제했지만 도움이되지 않았습니다. 도커는 여전히 새 네트워크를 만들 수 없었습니다.

문제의 원인은 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 재시작, 도커 재설치, 네트워크 정리 등 여러 옵션을 시도한 후에 저에게 효과적이었습니다.
Matt

10
  1. 다른 컨테이너가 실행 중인지 확인하십시오. 그렇다면, 다음을 수행하십시오. docker-compose down
  2. VPN이 연결되어 있으면 연결을 끊고 도커 컨테이너를 다시 시도하십시오.

    docker-compose up -d container_name

나는 VPN을 실행하지 않았지만 docker-compose down나를 위해 고쳤다
IMB


8

나는 같은 문제를 권장했다. 그 이유는 당신이 최대 네트워크에 도달했기 때문이다.

다음을 docker network ls 사용하여 제거 할 항목을 선택하십시오.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객체를 내 객체에 추가해야한다고 분명히 밝혔습니다 docker-compose.

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

Docker 버전 18.09.8, docker-compose버전 1.24.1및 작성 파일 형식을 사용하고 3.7있었습니다.


1
이것이 질문입니까? 답입니까?
chovy

더 : A : Docker-network land에서의 모험과 내가 갇힌 무언가에 걸려 넘어지는 방법.
Stefan van den Akker

6

내가 사용했기 때문에 이것은 나에게 일어났다 OpenVPN. VPN 사용을 중지하거나 수동으로 네트워크를 docker-compose 파일에 추가하거나 미친 스크립트를 실행할 필요가없는 방법을 찾았습니다.

WireGuard대신 로 전환했습니다 OpenVPN. 더 구체적으로, nordvpn 솔루션을 실행하면서 WireGuard를 설치하고 해당 버전 인 NordLynx를 사용했습니다.


NordVPN의 OpenVPN에서 WireGuard 프로토콜로 전환하는 특정 명령은 nordvpn set technology NordLynx입니다. 별도의 제품이 아니며 현재 Linux 및 iOS에서만 사용할 수 있습니다.
tephyr

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-poolsdeamon 설정을 통해 각 네트워크에 얼마나 많은 IP 공간 도커를 제공할지 제어 할 수 있습니다 /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 주소를 예약했습니다 .

내가 만든 다른 네트워크의 경우 docker는 10.254.0.0한 번에 16 개의 호스트를 제공 하여 공간 (65k 호스트) 을 분할합니다 (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

나는 같은 문제에 부딪쳤다

기본 드라이버
ERROR 로 네트워크 "schemaregistry1_default"를 작성하는 중 : 네트워크에 할당 할 기본값 중에서 사용 가능하고 겹치지 않는 IPv4 주소 풀을 찾을 수 없습니다.

Cisco VPN을 끄기 전까지는 아무런 도움이되지 않았습니다. 그 docker-compose up이 작동 한 후


-3

이 문제를 단계별로 해결했습니다.

  1. 네트워크를 끄십시오 (무선 또는 유선 ...).

  2. 시스템을 재부팅하십시오.

  3. PC에서 네트워크를 켜기 전에 docker-compose 명령을 실행하면 새로운 네트워크가 생성됩니다.

  4. 네트워크를 켜고 켤 수 있습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.