因为网络原因,docker根本拉不出来镜像,网上那些镜像网站分分钟不能用,给docker挂个代理基本上是最稳定省事的解决方案了,在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。所以说第一步就是创建 dockerd 相关的 systemd 目录,这个目录下的配置将覆盖 dockerd 的默认配置
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,*.example.com"
其中http://proxy.example.com:8080要换成可用的免密代理。多个 NO_PROXY 变量的值用逗号分隔,而且可以使用通配符(*),极端情况下,如果 NO_PROXY=*,那么所有请求都将不通过代理服务器。
重新加载配置文件,重启 dockerd
sudo systemctl daemon-reload
sudo systemctl restart docker
检查确认环境变量已经正确配置:
sudo systemctl show --property=Environment docker
从 docker info 的结果中查看配置项。
docker info
sudo:这是一个命令行程序,允许你以超级用户(root)的权限运行其他命令。在Linux系统中,某些操作需要管理员权限,使用sudo可以提供这种权限。
systemctl:这是systemd系统和服务管理器的命令行界面。systemd是Linux系统中用于初始化系统组件和服务的守护进程。
show:这是systemctl的一个子命令,用于显示服务或单元的详细状态和配置。
--property=Environment:这是show命令的一个选项,指定要显示的是服务的"Environment"属性,即环境变量。
docker:这是你要查询的服务名称。在这个例子中,docker指的是Docker容器服务。
综合来看,sudo systemctl show --property=Environment docker这个命令是用来查看Docker服务的环境变量设置的。这些环境变量可能包括Docker的配置选项,如日志记录级别、存储驱动等。
sudo: 这是命令行中的一个程序,允许普通用户以超级用户(root)的权限来执行命令。使用sudo时,系统会要求输入用户的密码,以验证身份。
systemctl: 这是Systemd 'system and service manager' 的缩写,是Linux系统中用于控制服务和系统的命令行工具。
daemon-reload: 这是systemctl的一个选项,用于重新加载Systemd的配置文件。这通常在修改了服务的配置文件后使用,以便让Systemd识别新的配置。
restart: 这是systemctl的一个命令,用于重启指定的服务。如果服务正在运行,这个命令会停止服务然后再重新启动它;如果服务没有运行,它将直接启动服务。
docker: 这是要控制的服务的名称。在这个上下文中,它指的是Docker服务,Docker是一个开源的应用容器引擎,可以打包应用和其依赖到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
综上所述,这条命令的意思是:以超级用户权限重新加载Systemd的配置,然后重启Docker服务。这通常用于在修改了Docker服务的配置文件之后,确保更改立即生效。
HTTP_PROXY=http://proxy.example.com:8080/:这个环境变量设置了一个HTTP代理服务器的地址和端口号。当应用程序需要通过HTTP协议访问外部资源时,它会通过这个代理服务器进行。
HTTPS_PROXY=http://proxy.example.com:8080/:这个环境变量设置了一个HTTPS代理服务器的地址和端口号。HTTPS是一种安全的HTTP协议,通常用于加密的网络通信。当应用程序需要通过HTTPS协议访问外部资源时,它会通过这个代理服务器进行。
NO_PROXY=localhost,127.0.0.1,*.example.com:这个环境变量定义了一个代理服务器的例外列表。在这个列表中的主机名或IP地址将不会被代理,应用程序将直接与这些地址通信。这里的localhost和127.0.0.1是本地机器的地址,*.example.com是一个通配符,表示所有以.example.com结尾的域名。
总的来说,这段配置用于定义服务在访问网络资源时的代理设置,同时指定了哪些地址不应该通过代理访问。
sudo mkdir -p /etc/systemd/system/docker.service.d:
sudo:以超级用户(管理员)的权限执行后面的命令。
mkdir:创建一个新目录。
-p:这个选项告诉mkdir命令,如果目录的上级目录不存在,就创建它们。这样,即使/etc/systemd/system或docker.service.d目录不存在,这个命令也会创建整个路径。
/etc/systemd/system/docker.service.d:这是要创建的目录路径,它位于/etc/systemd/system目录下,名为docker.service.d。
sudo touch /etc/systemd/system/docker.service.d/proxy.conf:
touch:创建一个空文件,如果文件已经存在,更新它的访问和修改时间。
/etc/systemd/system/docker.service.d/proxy.conf:这是要创建的文件路径,它位于/etc/systemd/system/docker.service.d目录下,文件名为proxy.conf。
总的来说,这两条命令的目的是创建一个目录和一个文件,这些文件和目录通常用于配置Docker服务的systemd单元文件,比如设置代理服务器等。