J'ai un répertoire apkmirror-scraper-compose
avec la structure suivante:
.
├── docker-compose.yml
├── privoxy
│ ├── config
│ └── Dockerfile
├── scraper
│ ├── Dockerfile
│ ├── newnym.py
│ └── requirements.txt
└── tor
└── Dockerfile
J'essaye d'exécuter ce qui suit 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
où Dockerfile
pour tor
est
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"]
que pour privoxy
est
FROM alpine:latest
EXPOSE 8118
RUN apk --update add privoxy
COPY config /etc/privoxy/config
CMD ["privoxy", "--no-daemon"]
où se config
compose des deux lignes
listen-address 0.0.0.0:8118
forward-socks5 / tor:9050 .
et le Dockerfile
pour scraper
est
FROM python:2.7-alpine
ADD . /scraper
WORKDIR /scraper
RUN pip install -r requirements.txt
CMD ["python", "newnym.py"]
où requirements.txt
contient la seule ligne requests
. Enfin, le programme newnym.py
est conçu pour tester simplement si la modification de l'adresse IP à l'aide de Tor fonctionne:
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)))
La docker-compose build
compilation réussit, mais si j'essaye docker-compose up
, j'obtiens le message d'erreur suivant:
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
J'ai essayé de rechercher de l'aide sur ce message d'erreur, mais je n'en ai trouvé aucune. Qu'est ce qui cause cette erreur?
python
docker
docker-compose
Kurt Peek
la source
la source
docker ps
ne montre aucun conteneur en cours d'exécution.docker network ls
confirmer si des réseaux ont déjà été créés sur votre hôte.docker network prune
. Cela résoudra votre problèmeRéponses:
Je l'ai vu suggérer que le docker pourrait être à son maximum de réseaux créés. La commande
docker network prune
peut être utilisée pour supprimer tous les réseaux non utilisés par au moins un conteneur.Mon problème a fini par être, comme Robert l'a commenté: un problème avec openvpn a
service openvpn stop
«résolu» le problème.la source
Docker system prune
peut également être un correctif, mais soyez prudent, cela peut supprimer votre base de données, utilisez-la uniquement si vous ne vous souciez pas de votre base de données, ou si votre conteneur de base de données est en cours d'exécution, cette commande est sûre car elle élague uniquement les éléments non utilisés par au moins un conteneur.J'ai rencontré ce problème parce que j'avais OpenVPN en cours d'exécution. Dès que j'ai tué OpenVPN, j'ai
docker-compose up
tiré tout de suite et l'erreur a disparu.la source
redirect-gateway def1
de contourner le problème sans tuer mon service openvpn.J'ai rencontré ce problème avec OpenVPN fonctionnant également et j'ai trouvé une solution où vous ne devriez PAS arrêter / démarrer le serveur OpenVPN.
Idée que vous devez spécifier exactement le sous-réseau que vous souhaitez utiliser. Par
docker-compose.yml
écrit:C'est tout. Maintenant, le
default
réseau sera utilisé et si votre VPN ne vous a pas attribué quelque chose du172.16.57.*
sous-réseau, tout va bien.la source
172.16.*.*
sous172.177.57.*
soit une bonne idée, car ce n'est pas dans le fichier en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses . Utilisez des adresses comprises dans cette plage.À la suite de Peter Hauge d » commentaire , sur l' exécution ,
docker network ls
j'ai vu (entre autres lignes) ce qui suit:La ligne avec
NAME
etDRIVER
comme les deuxhost
semble être ce à quoi il se réfère avec "réseaux déjà créés sur votre hôte". Donc, après https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 , j'ai exécuté la commandeFonctionne maintenant
docker-compose up
(bien quenewnym.py
produit une erreur).la source
default
)docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')
je reçoisError response from daemon: bridge is a pre-defined network and cannot be removed
UbuntuDocker version 19.03.9, build 9d988398e7
docker-compose version 1.25.0, build unknown
J'ai le même problème. J'ai couru
docker system prune -a --volumes
,docker network prune
mais aucun ne m'a aidé.J'utilise un VPN, j'ai désactivé le VPN et, une fois que le docker a démarré normalement, j'ai pu créer un réseau. Après cela, vous pouvez réactiver le VPN.
la source
Comme d'autres réponses l'ont mentionné, le
bridge
réseau local par défaut de Docker ne prend en charge que 30 réseaux différents (chacun d'eux étant identifiable de manière unique par son nom). Si vous ne les utilisez pas, alorsdocker network prune
fera l'affaire.Cependant, vous pourriez être intéressé par l'établissement de plus de 30 conteneurs, chacun avec son propre réseau. Si cela vous intéressait, il vous faudrait définir un
overlay
réseau. C'est un peu plus délicat mais extrêmement bien documenté ici .EDIT (mai 2020): Le lien est devenu indisponible, en parcourant la documentation, il n'y a pas de remplacement exact, mais je recommanderais de partir d' ici .
la source
J'ai eu un problème identique avec le même message d'erreur mais la solution avec la suppression des réseaux docker inutilisés ne m'a pas aidé. J'ai supprimé tous les réseaux docker non par défaut (et toutes les images et tous les conteneurs également) mais cela n'a pas aidé - docker n'était toujours pas en mesure de créer un nouveau réseau.
La cause du problème était dans les interfaces réseau qui ont été laissées après l'installation d'OpenVpn. (Il a été installé sur l'hôte précédemment.) Je les ai trouvés en exécutant la
ifconfig
commande:J'ai constaté que je pouvais les supprimer avec quelques commandes:
Après cela, le problème a disparu.
la source
docker-compose down
Si VPN est connecté, déconnectez-le et essayez à nouveau de mettre en place le conteneur Docker:
la source
docker-compose down
réparé pour moiTu peux essayer
A travaillé pour moi.
la source
J'ai rencontré le même problème, la raison en est que vous avez atteint le maximum de réseaux:
faire une:
docker network ls
Choisissez-en un à supprimer en utilisant:docker network rm networkname_default
la source
TL; DR
Ajouter
Lire
network_mode
dans la documentation .Version longue
Avertissement : je ne connais pas très bien le réseau Docker, mais cela a fait l'affaire pour moi. YMMV.
Lorsque j'ai exécuté
docker run my-image
le réseau ne m'a posé aucun problème, mais lorsque j'ai converti cette commande endocker-compose.yml
fichier, j'ai eu la même erreur que l'OP.J'ai lu la réponse d'Arenim et d'autres trucs sur Internet suggérant de réutiliser un réseau existant.
Vous pouvez trouver des réseaux existants comme celui-ci:
Je voulais réutiliser le
bridge
réseau par défaut , j'ai donc ajoutéà la racine de mon
docker-compose.yml
(donc pas à l'intérieur de l'un de monservices
, mais à la racine de l'indentation).J'ai maintenant l'erreur suivante:
Cela a conduit à ce problème Docker Github , qui indiquait clairement que je devais ajouter l'
network_mode
objet à mondocker-compose
:J'utilisais la version de Docker
18.09.8
, ladocker-compose
version1.24.1
et le format de fichier de composition3.7
.la source
Cela m'est arrivé parce que j'utilisais
OpenVPN
. J'ai trouvé un moyen de ne pas avoir besoin d'arrêter d'utiliser le VPN ou d'ajouter manuellement un réseau au fichier docker-compose ni d'exécuter un script fou.Je suis passé à
WireGuard
au lieu deOpenVPN
. Plus précisément, alors que j'exécute la solution nordvpn, j'ai installé WireGuard et j'ai utilisé leur version, NordLynx.la source
nordvpn set technology NordLynx
. Ce n'est pas un produit distinct et n'est actuellement disponible que sur Linux et iOS.Tuer le VPN n'est pas nécessaire.
Cet autre commentaire sur l'utilisation d'un nouveau réseau est assez proche de la solution pour moi , et a fonctionné pendant un certain temps, mais j'ai trouvé un meilleur moyen grâce à quelques discussions dans une autre question
Créez un réseau avec:
Ensuite, en bas de docker-compose.yaml, mettez ceci:
Terminé. Pas besoin d'ajouter des réseaux à toutes les définitions de conteneurs, etc. et vous pouvez également réutiliser le réseau avec d'autres fichiers docker-compose si vous le souhaitez.
la source
Si vous voulez beaucoup de réseaux, vous pouvez contrôler la quantité d'espace IP que le docker distribue à chaque réseau via le
default-address-pools
paramètre de démon, vous pouvez donc ajouter ceci à votre/etc/docker/daemon.json
:Ici, j'ai réservé
10.254.1.1/24
(254 adresses IP) pour le réseau de pont.Pour tout autre réseau que je crée, docker partitionnera l'
10.254.0.0
espace (65k hôtes), donnant 16 hôtes à la fois (se"size":28
réfère au masque CIDR , pour 16 hôtes).Si je crée quelques réseaux et que je les exécute
docker network inspect <name>
, cela peut afficher quelque chose comme ceci:Les
10.254.0.32/28
moyens de ce réseau peuvent utiliser 16 adresses IP10.254.0.32
-10.254.0.47
.la source
J'ai rencontré le même problème
Création du réseau "schemaregistry1_default" avec le pilote par défaut
ERREUR: impossible de trouver un pool d'adresses IPv4 disponible et sans chevauchement parmi les valeurs par défaut à attribuer au réseau
et rien n'a aidé jusqu'à ce que j'éteigne le VPN Cisco. après que docker-compose up a fonctionné
la source
J'ai résolu ce problème par étapes:
éteignez votre réseau (sans fil ou filaire ...).
redémarrez votre système.
avant d'allumer votre réseau sur PC, exécutez la commande docker-compose up, il va créer un nouveau réseau.
alors vous pouvez activer le réseau et continuer ...
la source