Запустите tor и polipo, когда я запусту свой контейнер
Я написал свой первый Dockerfile, чтобы протестировать Docker с tor и polipo. Мой Dockerfile выглядит так:
# Pull base image.
FROM ubuntu:latest
# Upgrade system
RUN apt-get update && apt-get dist-upgrade -y --no-install-recommends && apt-get autoremove -y && apt-get clean
# Install TOR
RUN apt-get install -y --no-install-recommends tor tor-geoipdb torsocks && apt-get autoremove -y && apt-get clean
# INSTALL POLIPO
RUN apt-get update && apt-get install -y polipo
# Default ORPort
EXPOSE 9001
# Default DirPort
EXPOSE 9030
# Default SOCKS5 proxy port
EXPOSE 9050
# Default ControlPort
EXPOSE 9051
# Default polipo Port
EXPOSE 8123
RUN echo 'socksParentProxy = "localhost:9050"' >> /etc/polipo/config
RUN echo 'socksProxyType = socks5' >> /etc/polipo/config
RUN echo 'diskCacheRoot = ""' >> /etc/polipo/config
RUN echo 'ORPort 9001' >> /etc/tor/torrc
RUN echo 'ExitPolicy reject *:*' >> /etc/tor/torrc
RUN mkdir scrapy
ADD scrapyTor scrapy
ADD startpolipotor.sh .
RUN chmod 775 ./startpolipotor.sh
мой startpolipotor.sh содержит 3 строки:
#!/bin/bash
/etc/init.d/tor start &
/etct/init.d/polipo start &
Но когда я запускаю эту команду:
docker run -i -t id_image /bin/bash
И однажды внутри в контейнере, когда я запускаю ps
, Я ничего не вижу. Как я могу решить это?
1 ответ
Ваш Dockerfile
должна иметь команду, определенную как:
CMD ./startpolipotor.sh
Тогда вам не нужно предоставлять /bin/bash
как run
команда. Только следующего должно быть достаточно:
docker run -i -t id_image
Кстати, ваш файл скрипта создает два процесса, работающих в фоновом режиме. Это не будет работать!
Контейнеры Docker должны всегда иметь процесс на переднем плане. В вашем случае контейнер остановится сразу после выполнения вашего стартового скрипта. И во время остановки SIGTERM
не будут должным образом отправлены в эти фоновые процессы, поэтому они просто будут убиты и могут оставить некоторые поврежденные данные.
Вы должны подумать об использовании supervisord
вместо этого, когда вам нужно запустить несколько процессов в вашем контейнере.