容器中的docker和代理服务器

容器中的docker和代理服务器

我最近在 RHEL 8 中安装了 docker,它依赖代理进行 HTTP/HTTPS 连接。在 /etc/systemd/system/docker.service.d/http-proxy.conf 中设置环境变量使 docker 正常工作:

[Service]
Environment="http_proxy=http://192.168.10.40:8080/"
Environment="https_proxy=http://192.168.10.40:8080/"
Environment="ftp_proxy=http://192.168.10.40:8080/"
Environment="HTTP_PROXY=http://192.168.10.40:8080/"
Environment="HTTPS_PROXY=http://192.168.10.40:8080/"
Environment="FTP_PROXY=http://192.168.10.40:8080/"
Environment="NO_PROXY=127,0,0,1,...etc..."
Environment="no_proxy=127.0.0.1,...etc..."

现在我想运行一个容器并拥有正确的代理设置,而不必为每个容器指定它们。因此,正如文档所述 -https://docs.docker.com/network/proxy/- 我已经创建了 /etc/docker/daemon.json,内容如下:

{
  "proxies": {
    "default": {
      "httpProxy": "http://192.168.10.40:8080",
      "httpsProxy": "http://192.168.10.40:8080",
      "noProxy": "127.0.0.0/8"
    }
  }
}

但 docker 无法启动,错误信息为:“无法使用文件 /etc/docker/daemon.json 配置 Docker 守护进程:以下指令与任何配置选项都不匹配:默认”。我找到了另一个文档页面 -https://docs.docker.com/config/daemon/systemd/- 因此我修改了 daemon.json:

{
  "proxies": {
    "http-proxy": "http://192.168.10.40:8080",
    "https-proxy": "http://192.168.10.40:8080",
    "no-proxy": 127.0.0.0/8"
  }
}

docker 正确启动,并且 docker info 命令显示从 daemon.json 读取的代理设置:

Client: Docker Engine - Community
 Version:    24.0.2
 Context:    default
[...]
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http://192.168.10.40:8080
 HTTPS Proxy: http://192.168.10.40:8080
 No Proxy: 127.0.0.0/8
[...]

但是当我执行测试时,容器中的环境变量没有设置:

[root@linux]# docker run --rm alpine sh -c 'env'
HOSTNAME=b4516e7df5c1
SHLVL=1
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

当然,我可以手动为每个容器设置变量,但文档说可以自动完成此操作,否则我做错了什么,或者某些事情没有正常工作。

有人经历过这样的事吗?

相关内容