如何将 docker 容器连接到本地计算机上的 tor 代理?

Ema*_*aei 6 linux proxy tor docker

我想通过本地计算机上的 Tor 代理从 docker 容器内部 ping 一个网站。如果没有设置代理,我无法 ping 通。当我运行容器时:
sudo docker run --rm -it -p9150:9150 my-container
我收到以下错误:
Error starting userland proxy: listen tcp 0.0.0.0:9150: bind: address already in use.
我在 localhost:9150 上启动了 tor-browser,但在运行容器时无法进行端口转发。我也不想--net=host在命令中使用。我添加了以下行
Environment="ALL_PROXY=socks5://127.0.0.1:9150"/lib/systemd/system/docker.service 但没有字。任何人都可以帮我解决这个问题吗?(操作系统:Ubuntu 20.04)

Ema*_*aei 8

运行 TOR 代理和应用程序

经过长时间的研究,我采取了以下步骤:

  1. sudo docker pull dperson/torproxy
  2. sudo docker 网络创建 tor
  3. sudo docker run --rm -it --name mytor --network tor -p9050:9050 dperson/torproxy
  4. sudo docker run --rm -it --network to myapp

在 myapp 中,我有一个 python 脚本,它通过 torocks 代理将消息发送到我的电报频道。我有一个网络(tor),两个容器通过它互相看到。在 python 脚本中我有以下行:

bot = telegram.Bot(token=token, request=Request(con_pool_size=10, connect_timeout=40, proxy_url='socks5h://mytor:9050'))
Run Code Online (Sandbox Code Playgroud)

手动测试 TOR 代理

运行另一个容器,一个通用容器,例如

docker run --rm -it --network tor ubuntu:22.04
Run Code Online (Sandbox Code Playgroud)

按照通常的方式安装curl(例如apt-get在 debian/ubuntu 中)。

然后在命令行中执行:

curl -x socks5://mytor:9050 http://checkip.amazonaws.com/
Run Code Online (Sandbox Code Playgroud)

您将看到 TOR 出口节点的 IP:

TOR出口节点的IP