Saya memiliki direktori apkmirror-scraper-compose
dengan struktur berikut:
.
├── docker-compose.yml
├── privoxy
│ ├── config
│ └── Dockerfile
├── scraper
│ ├── Dockerfile
│ ├── newnym.py
│ └── requirements.txt
└── tor
└── Dockerfile
Saya mencoba menjalankan yang berikut ini 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
dimana Dockerfile
untuk tor
itu
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"]
untuk privoxy
itu
FROM alpine:latest
EXPOSE 8118
RUN apk --update add privoxy
COPY config /etc/privoxy/config
CMD ["privoxy", "--no-daemon"]
dimana config
terdiri dari dua garis
listen-address 0.0.0.0:8118
forward-socks5 / tor:9050 .
dan Dockerfile
untuk scraper
itu
FROM python:2.7-alpine
ADD . /scraper
WORKDIR /scraper
RUN pip install -r requirements.txt
CMD ["python", "newnym.py"]
di mana requirements.txt
berisi satu baris requests
. Akhirnya, program newnym.py
ini dirancang untuk hanya menguji apakah mengubah alamat IP menggunakan Tor berfungsi:
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)))
The docker-compose build
membangun berhasil, tapi jika saya mencoba docker-compose up
, saya mendapatkan pesan error berikut:
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
Saya mencoba mencari bantuan pada pesan kesalahan ini, tetapi tidak dapat menemukannya. Apa yang menyebabkan kesalahan ini?
python
docker
docker-compose
Kurt Peek
sumber
sumber
docker ps
tidak menunjukkan wadah berjalan.docker network ls
dan mengonfirmasi jika jaringan sudah dibuat di host Anda.docker network prune
. Ini akan menyelesaikan masalah AndaJawaban:
Saya telah melihatnya menyarankan buruh pelabuhan mungkin pada maksimum jaringan yang dibuat. Perintah
docker network prune
ini dapat digunakan untuk menghapus semua jaringan yang tidak digunakan oleh setidaknya satu kontainer.Masalah saya akhirnya, ketika Robert berkomentar tentang: masalah dengan openvpn
service openvpn stop
'memecahkan' masalah.sumber
Docker system prune
juga bisa menjadi perbaikan, tetapi harap berhati-hati, ini dapat menghapus DB Anda, hanya gunakan ini jika Anda tidak peduli untuk Anda DB, atau jika wadah DB Anda berjalan maka perintah ini aman karena hanya memangkas hal-hal yang tidak digunakan oleh setidaknya satu wadah.Saya mengalami masalah ini karena saya menjalankan OpenVPN. Segera setelah saya membunuh OpenVPN,
docker-compose up
langsung ditembakkan, dan kesalahannya hilang.sumber
redirect-gateway def1
untuk mengatasi masalah ini tanpa mematikan layanan openvpn saya.Saya berlari dalam masalah ini dengan OpenVPN yang bekerja dengan baik dan saya telah menemukan solusi di mana Anda TIDAK harus menghentikan / memulai server OpenVPN.
Ide bahwa Anda harus menentukan subnet apa yang ingin Anda gunakan. Dalam
docker-compose.yml
menulis:Itu dia. Sekarang,
default
jaringan akan digunakan dan jika VPN Anda tidak memberikan Anda sesuatu dari172.16.57.*
subnet, Anda baik-baik saja.sumber
172.16.*.*
subnet172.177.57.*
adalah ide yang baik, karena itu bukan di en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses . Gunakan alamat dalam kisaran ini.Berikut Peter Hauge 's komentar , setelah berjalan
docker network ls
saya melihat (antara garis lainnya) berikut ini:Baris dengan
NAME
dan sepertinyaDRIVER
keduanyahost
mengacu pada "jaringan yang sudah dibuat di host Anda". Jadi, mengikuti https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430 , saya menjalankan perintahSekarang
docker-compose up
berfungsi (meskipunnewnym.py
menghasilkan kesalahan).sumber
default
docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')
saya dapatkanError response from daemon: bridge is a pre-defined network and cannot be removed
di Ubuntu 20.04Docker version 19.03.9, build 9d988398e7
docker-compose version 1.25.0, build unknown
Saya memiliki masalah yang sama. Saya berlari
docker system prune -a --volumes
,docker network prune
tetapi tidak ada yang membantu saya.Saya menggunakan VPN, saya mematikan VPN dan, setelah itu buruh pelabuhan mulai normal dan mampu membuat jaringan. Setelah itu, Anda dapat mengaktifkan VPN lagi.
sumber
Seperti jawaban lain yang disebutkan,
bridge
jaringan lokal default Docker hanya mendukung 30 jaringan yang berbeda (masing-masing dari mereka dapat diidentifikasi secara unik berdasarkan namanya). Jika Anda tidak menggunakannya, makadocker network prune
akan melakukan trik.Namun, Anda mungkin tertarik untuk membangun lebih dari 30 kontainer, masing-masing dengan jaringan mereka sendiri. Jika Anda tertarik melakukannya maka Anda perlu mendefinisikan
overlay
jaringan. Ini sedikit lebih rumit tetapi didokumentasikan dengan sangat baik di sini .EDIT (Mei 2020): Tautan tidak tersedia, melihat dokumen tidak ada pengganti yang tepat, tapi saya akan merekomendasikan mulai dari sini .
sumber
Saya memiliki masalah yang identik dengan pesan kesalahan yang sama tetapi solusi dengan penghapusan jaringan buruh pelabuhan yang tidak digunakan tidak membantu saya. Saya telah menghapus semua jaringan buruh pelabuhan non-standar (dan semua gambar dan wadah juga) tetapi tidak membantu - buruh pelabuhan masih tidak dapat membuat jaringan baru.
Penyebab masalahnya adalah pada antarmuka jaringan yang tertinggal setelah instalasi OpenVpn. (Itu sudah diinstal pada host sebelumnya.) Saya menemukan mereka dengan menjalankan
ifconfig
perintah:Saya menemukan bahwa saya dapat menghapusnya dengan beberapa perintah:
Setelah ini masalahnya hilang.
sumber
docker-compose down
Jika VPN terhubung, maka lepaskan dan coba kembali ke atas wadah docker:
sumber
docker-compose down
memperbaikinya untuk sayaAnda dapat mencoba
Bekerja untukku.
sumber
Saya mengalami masalah yang sama, alasan mengapa Anda mencapai maks jaringan:
lakukan:
docker network ls
Pilih satu untuk dihapus menggunakan:docker network rm networkname_default
sumber
TL; DR
Menambahkan
Baca tentang
network_mode
dalam dokumentasi .Versi panjang
Penolakan : Saya tidak tahu banyak tentang jaringan Docker, tapi ini berhasil bagi saya. YMMV.
Ketika saya menjalankan
docker run my-image
jaringan tidak memberi masalah, tetapi ketika saya mengubah perintah ini menjadidocker-compose.yml
file, saya mendapatkan kesalahan yang sama dengan OP.Saya membaca jawaban Arenim dan beberapa hal lain di internet yang menyarankan untuk menggunakan kembali jaringan yang ada.
Anda dapat menemukan jaringan yang ada seperti ini:
Saya ingin menggunakan kembali
bridge
jaringan default , jadi saya menambahkanke root saya
docker-compose.yml
(jadi tidak di dalam salah satu dari sayaservices
, tetapi pada indentasi root).Saya sekarang mendapatkan kesalahan berikut:
Ini menyebabkan bertemu dengan masalah Docker Github ini , yang dengan jelas menyatakan bahwa saya harus menambahkan
network_mode
objek kedocker-compose
:Saya menggunakan versi Docker
18.09.8
,docker-compose
versi1.24.1
dan format file penulisan3.7
.sumber
Ini terjadi pada saya karena saya menggunakan
OpenVPN
. Saya menemukan cara saya tidak perlu berhenti menggunakan VPN atau secara manual menambahkan jaringan ke file pembuatan docker atau menjalankan skrip gila.Saya beralih ke
WireGuard
bukanOpenVPN
. Lebih khusus lagi, ketika saya menjalankan solusi nordvpn, saya menginstal WireGuard dan menggunakan versi mereka, NordLynx.sumber
nordvpn set technology NordLynx
. Ini bukan produk terpisah, dan saat ini hanya tersedia di Linux & iOS.Membunuh vpn tidak diperlukan.
Komentar lain tentang menggunakan jaringan baru ini cukup dekat dengan solusi untuk saya , dan bekerja untuk sementara waktu, tetapi saya menemukan cara yang lebih baik berkat beberapa pembicaraan di pertanyaan lain
Buat jaringan dengan:
Kemudian, di bagian bawah docker-compose.yaml, taruh ini:
Selesai Tidak perlu menambahkan jaringan ke semua definisi wadah, dll. Dan Anda dapat menggunakan kembali jaringan dengan file-file pembuatan docker lain juga jika Anda mau.
sumber
Jika Anda ingin banyak jaringan maka Anda dapat mengontrol seberapa banyak IP docker yang dibagikan ke masing-masing jaringan melalui
default-address-pools
pengaturan deamon, sehingga Anda dapat menambahkan ini ke/etc/docker/daemon.json
:Di sini saya telah memesan
10.254.1.1/24
(254 alamat IP) untuk jaringan jembatan.Untuk jaringan lain yang saya buat, buruh pelabuhan akan mempartisi
10.254.0.0
ruang (host 65k), memberikan 16 host sekaligus ("size":28
mengacu pada topeng CIDR , untuk 16 host).Jika saya membuat beberapa jaringan dan kemudian menjalankannya
docker network inspect <name>
, itu mungkin menampilkan sesuatu seperti ini:The
10.254.0.32/28
berarti jaringan ini dapat menggunakan 16 ip alamat dari10.254.0.32
-10.254.0.47
.sumber
Saya mengalami masalah yang sama
Membuat jaringan "schemaregistry1_default" dengan driver default
ERROR: tidak dapat menemukan kumpulan alamat IPv4 yang tersedia dan tidak tumpang tindih di antara default untuk ditetapkan ke jaringan
dan tidak ada yang membantu sampai saya mematikan Cisco VPN. setelah itu buruh pelabuhan-menulis berhasil
sumber
Saya memperbaiki masalah ini dengan langkah-langkah:
matikan jaringan Anda (nirkabel atau kabel ...).
reboot sistem Anda.
sebelum menghidupkan jaringan Anda di PC, jalankan perintah docker-compose up, itu akan membuat jaringan baru.
maka Anda dapat mengaktifkan jaringan dan melanjutkan ...
sumber