Запустите 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 вместо этого, когда вам нужно запустить несколько процессов в вашем контейнере.

Другие вопросы по тегам