Ubuntu 启动容器时启动tor和polipo

Ubuntu 启动容器时启动tor和polipo,ubuntu,docker,tor,dockerfile,polipo,Ubuntu,Docker,Tor,Dockerfile,Polipo,为了用tor和polipo测试Docker,我写了我的第一个Docker文件。 我的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

为了用tor和polipo测试Docker,我写了我的第一个Docker文件。 我的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
my startpolipotor.sh包含3行:

#!/bin/bash                                                              
/etc/init.d/tor start &
/etct/init.d/polipo start &
但当我启动此命令时:

docker run -i -t id_image /bin/bash
一旦进入容器,当我启动
ps
时,我什么也看不到。
如何解决此问题?

您的
Dockerfile
应具有如下定义的命令:

CMD ./startpolipotor.sh
然后,您不需要将
/bin/bash
作为
运行
命令提供。只有以下几点就足够了:

docker run -i -t id_image
顺便说一下:脚本文件创建了两个在后台运行的进程。那不行

Docker容器需要始终在前台有一个进程。在您的情况下,容器将在执行开始脚本后立即停止。停止时,SIGTERM将不会正确发送到这些后台进程,因此它们将被杀死,并可能留下一些损坏的数据


当需要启动容器中的多个进程时,您应该考虑改用。

Dockerfile应该将
CMD somecommand
ENTRYPOINT somecommand
作为最后一个命令,或者
docker run
命令应该启动Tor/Polipo,在
docker exec
之后,您应该执行
ps-e
,而不是只显示流程的
ps