我在 Ubuntu 16.04 上运行着 docker 19.03。这几天正在搭建 V2ray 客户端。
现在我遇到了如何让容器连接到该代理的问题。我在 StackOverflow 上读到了一些问题,例如这或者这我也读过官方文件这。这些对我帮助很大,但还不够。现在我的问题如下:
- 那些文档提到配置Docker客户端。比如修改
~/.docker/config.json
文件。这是一劳永逸的方法。但它会影响那些在我修改文件并重新启动docker后创建的容器。我现在还有一些其他容器在运行,我只想让这个容器连接到代理,因为代理不稳定,我不希望代理影响其他容器的工作。所以这个方案不能用。 - 这些文档还提到我们可以设置环境变量来使容器连接到代理。例如,当使用命令时
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 容器中的代理,除非在每个进程中都使用某种钩子。
我认为最好的选择是某种具有稳定地址的中间体,可以随着上游代理的变化根据需要重新配置。
或者,如果您在某种支架中运行容器,则可能会让它们快速失败,并在重新启动时获取新的代理详细信息。