Tôi có một thư mục apkmirror-scraper-compose
với cấu trúc sau:
.
├── docker-compose.yml
├── privoxy
│ ├── config
│ └── Dockerfile
├── scraper
│ ├── Dockerfile
│ ├── newnym.py
│ └── requirements.txt
└── tor
└── Dockerfile
Tôi đang cố chạy như sau 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
nơi Dockerfile
cho tor
là
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
là
FROM alpine:latest
EXPOSE 8118
RUN apk --update add privoxy
COPY config /etc/privoxy/config
CMD ["privoxy", "--no-daemon"]
trong đó config
bao gồm hai dòng
listen-address 0.0.0.0:8118
forward-socks5 / tor:9050 .
và Dockerfile
cho scraper
là
FROM python:2.7-alpine
ADD . /scraper
WORKDIR /scraper
RUN pip install -r requirements.txt
CMD ["python", "newnym.py"]
nơi requirements.txt
chứa dòng đơn requests
. Cuối cùng, chương trình newnym.py
được thiết kế để đơn giản kiểm tra xem việc thay đổi địa chỉ IP bằng Tor có hoạt động hay không:
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)))
Các docker-compose build
bản dựng thành công, nhưng nếu tôi thử docker-compose up
, tôi nhận được thông báo lỗi sau:
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
Tôi đã cố gắng tìm kiếm trợ giúp về thông báo lỗi này, nhưng không thể tìm thấy bất kỳ. Điều gì gây ra lỗi này?
docker network ls
và xác nhận nếu các mạng đã được tạo trên máy chủ của bạn.
docker network prune
. Điều này sẽ giải quyết vấn đề của bạn
docker ps
cho thấy không có container chạy.