我怎样才能让我的docker容器连接到代理?

我怎样才能让我的docker容器连接到代理?

我在 Ubuntu 16.04 上运行着 docker 19.03。这几天正在搭建 V2ray 客户端。

现在我遇到了如何让容器连接到该代理的问题。我在 StackOverflow 上读到了一些问题,例如或者我也读过官方文件。这些对我帮助很大,但还不够。现在我的问题如下:

  1. 那些文档提到配置Docker客户端。比如修改~/.docker/config.json文件。这是一劳永逸的方法。但它会影响那些在我修改文件并重新启动docker后创建的容器。我现在还有一些其他容器在运行,我只想让这个容器连接到代理,因为代理不稳定,我不希望代理影响其他容器的工作。所以这个方案不能用。
  2. 这些文档还提到我们可以设置环境变量来使容器连接到代理。例如,当使用命令时docker run,我们可以添加-env HTTP_PROXY="http://localhost:1080/"以强制容器连接到代理。但只有命令docker run和两个示例Dockerfile。我用它docker-compose来构建我的容器。我已经将项目添加environment到我的docker-compose文件中,但它不起作用。所以我不知道在使用时如何做到这一点docker-compose

我的docker-compose.yml文件如下:

version: '3.5'
services:
  openethereum:
    image: openethereum/openethereum
    container_name: openethereum
    volumes:
      - /mnt/pgdata/ETH:/home/openethereum/.local/share/io.parity.ethereum
    command: --tracing=off --warp-barrier=12088645
    environment:
      HTTP_PROXY: http://172.21.0.1:2080/
      HTTPS_PROXY: https://172.21.0.1:2080/

我使用172.21.0.1作为容器的 IP 地址来连接代理,因为我知道这个容器的 IP 地址是172.21.0.2,而我的代理正在监听所有 IP 地址。我不确定这是否是正确的用法,如果有任何问题,感谢您指出。

proxychains在电脑上安装并配置了它。当我运行命令时proxychains curl www.google.com,我得到了很多 HTML 文本。但是当我通过运行命令进入我的容器后docker exec -it openethereum sh,我再次运行命令curl www.google.com。之后我等了很长时间,最后它告诉我无法解析地址。

非常感谢您阅读我的问题,如果您有任何解决方案,也感谢您分享您的解决方案。

答案1

好的,如果我理解正确的话,您想在 docker 容器中设置代理,但由于代理没有稳定的地址,所以无法设置。

我不相信你可以更改正在运行的 docker 容器中的代理,除非在每个进程中都使用某种钩子。

我认为最好的选择是某种具有稳定地址的中间体,可以随着上游代理的变化根据需要重新配置。

或者,如果您在某种支架中运行容器,则可能会让它们快速失败,并在重新启动时获取新的代理详细信息。

相关内容