我最近在 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=/
当然,我可以手动为每个容器设置变量,但文档说可以自动完成此操作,否则我做错了什么,或者某些事情没有正常工作。
有人经历过这样的事吗?