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'essaie de lancer le docker-compose.yml
suivant:
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ù config
est constitué 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 le changement d'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 __== '__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)))
Le docker-compose build
se construit correctement, mais si j'essaie 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 chercher de l'aide sur ce message d'erreur, mais je n'en ai trouvé aucun. Qu'est ce qui cause cette erreur?
Après Peter Hauge 's comment , en exécutant docker network ls
, j'ai vu (entre autres lignes) ce qui suit:
NETWORK ID NAME DRIVER SCOPE
dc6a83d13f44 bridge bridge local
ea98225c7754 docker_gwbridge bridge local
107dcd8aa889 Host Host local
La ligne avec NAME
et DRIVER
en tant que Host
semble être ce à quoi il fait référence avec "les réseaux déjà créés sur votre hôte". Donc, après https://Gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b4 , j'ai exécuté la commande
docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')
Maintenant, docker-compose up
fonctionne (bien que newnym.py
génère une erreur).
Je l'ai vu suggérer que docker soit au maximum de ses 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 commenté: un problème avec openvpn service openvpn stop
'a résolu' le problème.
J'ai rencontré ce problème parce que j'avais OpenVPN en cours d'exécution. Dès que j'ai tué OpenVPN, docker-compose up
s'est déclenché et l'erreur a disparu.
J'ai le même problème. J'ai couru docker system Prune -a --volumes
, docker network Prune
, mais les deux ne m'ont pas aidé.
J'utilise un réseau privé virtuel, je le désactive, puis le menu fixe démarre normalement et il peut créer un réseau. Après tout, vous pouvez réactiver le VPN
Comme indiqué dans d'autres réponses, le réseau local bridge
par défaut de Docker ne prend en charge que 30 réseaux différents (chacun d'eux identifiable de manière unique par son nom). Si vous ne les utilisez pas, alors docker network Prune
fera l'affaire.
Toutefois, vous voudrez peut-être créer plus de 30 conteneurs, chacun avec son propre réseau. Si cela vous intéressait, vous auriez besoin de définir un réseau overlay
. C'est un peu plus compliqué mais extrêmement bien documenté ici .
J'ai rencontré ce problème alors que OpenVPN fonctionnait et j'ai trouvé une solution qui ne devrait PAS arrêter/démarrer le serveur OpenVPN.
Idée selon laquelle vous devez spécifier le sous-réseau à utiliser. Dans docker-compose.yml
écrivez:
networks:
default:
driver: bridge
ipam:
config:
- subnet: 172.177.57.0/24
C'est ça. Maintenant, default
réseau sera utilisé et si votre VPN ne vous a pas attribué quelque chose du sous-réseau 172.177.57.*
, vous vous en sortez bien.
docker-compose down
Si un réseau privé virtuel est connecté, déconnectez-le et essayez à nouveau d'utiliser le conteneur de menu fixe:
docker-compose up -d container_name
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 de menu fixe non définis par défaut (ainsi que toutes les images et tous les conteneurs), mais cela n'a pas aidé - Docker n'a toujours pas été en mesure de créer un nouveau réseau.
Le problème était dû aux interfaces réseau laissées après l'installation d'OpenVpn. (Il était précédemment installé sur l'hôte.) Je les ai trouvés en exécutant la commande 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)
...
J'ai constaté que je pouvais les supprimer avec quelques commandes:
ip link delete tun0
ip link delete tun1
Après cela, le problème a disparu.
Tu peux essayer
$Sudo service network-manager restart
Travaillé pour moi.
J'ai rencontré le même problème, la raison en est que vous avez atteint le maximum de réseaux:
do a: docker network ls
Choisissez-en un à supprimer en utilisant: docker network rm networkname_default
J'ai résolu ce problème en procédant comme suit:
éteignez votre réseau (sans fil ou filaire ...).
redémarrez votre système.
avant d’allumer votre réseau sur un PC, exécutez la commande docker-compos up, cela va créer un nouveau réseau.
alors vous pouvez activer le réseau et continuer ...
Ajouter
version: "3.7"
services:
web:
...
network_mode: "bridge"
Lisez à propos de network_mode
dans la documentation .
Disclaimer : Je ne connais pas très bien le réseautage Docker, la "solution" qui a fonctionné pour moi ressemble à une incantation magique et au YMMV.
Lorsque j'ai exécuté docker run my-image
, la mise en réseau ne m'a posé aucun problème, mais lorsque j'ai converti cette commande en fichier docker-compose.yml
, j'ai obtenu la même erreur que l'OP.
J'ai lu réponse d'Arenim et d'autres informations sur Internet suggérant de réutiliser un réseau existant.
Vous pouvez trouver des réseaux existants comme ceci:
# docker network ls
NETWORK ID NAME DRIVER SCOPE
ca0415dfa442 bridge bridge local
78cbbda034dd Host Host local
709f13f4ce2d none null local
Je voulais réutiliser le réseau par défaut bridge
, alors j’ai ajouté
services:
web:
...
networks:
default:
external:
name: bridge
à la racine de mon docker-compose.yml
(donc pas à l'intérieur de l'un de mes services
, mais à l'indentation de la racine).
J'ai maintenant l'erreur suivante:
ERREUR: pour les alias de portée du réseau de votre conteneur n'est pris en charge que pour les conteneurs des réseaux définis par l'utilisateur
Cela a abouti à cette question de Docker Github , indiquant clairement que je devrais ajouter l'objet network_mode
à mon docker-compose
:
version: "3.7"
services:
web:
...
network_mode: "bridge"
J'utilisais la version Docker 18.09.8
, docker-compose
version 1.24.1
et le format de fichier de composition 3.7
.