让一个 docker 容器在另一个 docker 容器中使用代理 docker-compose

Have a docker container use a proxy inside another docker container with docker-compose

假设我有两个 docker 容器。一个包含 0.0.0.0:PORT 上带有代理的图像。另一个容器需要使用该代理。

澄清一下,我不想在这里使用主机。所以主机上没有 network_mode: host 和 运行 代理。我想将代理和将使用该代理的服务容器化。

我使用 docker-compose 所以如果你能给我提供一个例子,我会很高兴。

如果你需要知道,代理是使用this image的tor代理。

谢谢! (:

我建议使用 bridge 网络模式,这是 docker compose 的默认模式。举个例子:

version: '3.7'
services:
  tor:
    image: osminogin/tor-simple
    restart: always

  curl:
    image: curlimages/curl
    tty: true
    stdin_open: true
    command: ["sh"]
    depends_on:
      - tor

在这里你可以看到我们设置了一个 tor-simple 代理和一个 curlimages 显然将用于通过代理向 Tor 网络发送请求。默认情况下 docker compose 将设置一个网络,其中每个容器的主机名将是容器本身的名称,因此 tor 用于代理,curl 用于 curlimage

为了证明我们可以使用代理连接到 tor,首先我们使用 docker compose up 启动容器。然后我们可以使用 docker attach <image-id> 附加到 curl 图像,这将给我们一个 shell (command: [sh] 并且 curl 在交互模式下是 运行)

现在,我们应该验证我们的 Tor 连接:

curl --socks5 tor:9050 --socks5-hostname tor:9050 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs

请注意 curl 将使用端口 9500 (tor:9050) 连接到 tor-simple,这会将请求代理到 https://check.torproject.org/.

这应该打印如下内容:

Congratulations. This browser is configured to use Tor.