Docker容器内Tor隐藏服务无法通过Tor浏览器访问求助
问题解答
核心问题分析
你的Docker配置存在两个关键问题:
- Tor服务未在容器启动时运行:
RUN service tor restart是在镜像构建阶段执行的,容器启动时该服务不会自动启动,导致隐藏服务未生效。 - HiddenServiceDir权限不足:Tor运行用户为
debian-tor,默认情况下该用户没有/var/lib/tor/hidden_service/目录的读写权限,无法生成洋葱地址和处理请求。
修改后的Dockerfile
FROM node:latest WORKDIR /frontend/ COPY . . EXPOSE 3000 # 安装依赖和Tor,清理缓存减小镜像体积 RUN apt-get update -y && \ apt-get upgrade -y && \ apt-get install -y tor && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* RUN npm install # 修改Tor配置 RUN echo "HiddenServiceDir /var/lib/tor/hidden_service/" >> /etc/tor/torrc && \ echo "HiddenServicePort 80 127.0.0.1:3000" >> /etc/tor/torrc # 确保Tor用户对隐藏服务目录有读写权限 RUN chown -R debian-tor:debian-tor /var/lib/tor/hidden_service/ # 创建启动脚本,串联Tor启动、服务初始化、地址输出和Node服务启动流程 RUN echo '#!/bin/bash' > /start.sh && \ echo 'service tor start' >> /start.sh && \ echo 'sleep 5' >> /start.sh && \ echo 'cat /var/lib/tor/hidden_service/hostname' >> /start.sh && \ echo 'npm start' >> /start.sh && \ chmod +x /start.sh CMD ["/start.sh"]
修改后的运行命令
docker build -t my-hidden-service .
docker run my-hidden-service:latest
不需要映射
3000:3000端口,因为Tor隐藏服务的流量是通过Tor网络内部转发到容器的3000端口,主机无需直接访问该端口。
关键修改说明
- 将Tor服务启动逻辑移到容器启动阶段的脚本中,确保容器运行时Tor处于活跃状态。
- 添加
chown命令修改隐藏服务目录权限,让Tor用户能正常生成和维护洋葱地址。 - 使用启动脚本串联多步操作,避免CMD命令的执行顺序冲突问题。
- 清理APT缓存减小镜像体积,优化镜像构建流程。
内容的提问来源于stack exchange,提问作者stevan06
相关产品推荐
相关产品推荐

