Docker挂了…Emm原因大家都懂。
现在执行 docker pull 命令时需要挂上代理。
参考链接:https://docs.docker.com/engine/daemon/proxy/
系统环境:CentOS 7.8
链接里给到了两种方法,第一种我试了一直报错,简单搜索一下,没找到解决方案。
有效的方案:
创建目录,编辑配置文件:
1 2 |
mkdir /etc/systemd/system/docker.service.d/ vim /etc/systemd/system/docker.service.d/http-proxy.conf |
写入配置:
1 2 3 4 |
[Service] Environment="HTTP_PROXY=http://192.168.0.1:8118" Environment="HTTPS_PROXY=http://192.168.0.1:8118" Environment="NO_PROXY=localhost,127.0.0.1" |
重启Docker:
1 2 |
systemctl daemon-reload systemctl restart docker |
检查代理:
1 |
docker info | grep -i proxy |
一键脚本
我将安装Docker、配置VPN、拉TensorFlow镜像打包成了一个脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
#!/bin/bash username=$(whoami) if [ ! ${username} == "root" ]; then echo "please su root, cur_user: " ${username} exit 1 fi # 安装 Docker yum install -y docker # 默认代理设置(如果未提供参数则使用这些默认值) HTTP_PROXY=${1:-"http://192.168.0.1:8118"} HTTPS_PROXY=${2:-"$HTTP_PROXY"} # 默认为与 HTTP_PROXY 相同 NO_PROXY=${3:-"localhost,127.0.0.1"} # 配置路径 PROXY_CONF_DIR="/etc/systemd/system/docker.service.d" PROXY_CONF_FILE="$PROXY_CONF_DIR/http-proxy.conf" # 检查是否已经存在配置目录,不存在则创建 if [ ! -d "$PROXY_CONF_DIR" ]; then echo "创建目录: $PROXY_CONF_DIR" mkdir -p "$PROXY_CONF_DIR" fi # 如果配置文件已存在,进行备份 if [ -f "$PROXY_CONF_FILE" ]; then BACKUP_FILE="$PROXY_CONF_FILE.bak.$(date +%F_%T)" echo "备份已存在的配置文件到: $BACKUP_FILE" cp "$PROXY_CONF_FILE" "$BACKUP_FILE" else echo "配置文件不存在,无需备份。" fi # 读取配置文件内容 config_content="" if [ -f "$PROXY_CONF_FILE" ]; then config_content=$(<"$PROXY_CONF_FILE") # 使用内置命令读取文件内容 fi # 检查和创建 [Service] 块 if [[ ! "$config_content" == *"[Service]"* ]]; then if [[ -n "$config_content" ]]; then config_content+="\n[Service]" else config_content="[Service]" fi echo "创建 [Service] 块。" fi update_environment() { local key="$1" local value="$2" local service_line=$(echo -e "$config_content" | grep -n "^\[Service\]" | cut -d: -f1) if [ -z "$service_line" ]; then echo "未找到 [Service] 块,无法添加环境变量 $key。" return fi # 获取添加位置行号, 如果没有找到下一个块,获取文件的最后一行行号。 local add_line=$(echo -e "$config_content" | sed -n "$((service_line + 1)),\$p" | grep -n "^\[.*\]" | head -n 1 | cut -d: -f1) if [ -z "$add_line" ]; then add_line=$(echo -e "$config_content" | wc -l) else add_line=$((add_line - 1 + service_line)) fi # 查找现有配置 local current_value=$(echo -e "$config_content" | sed -n "$((service_line)),$ p" | grep "^Environment=\"$key=") if [ -n "$current_value" ]; then # 获取当前值 current_value=$(echo "$current_value" | sed -E "s/^Environment=\"$key=(.*)\"/\1/") if [ "$current_value" != "$value" ]; then echo "更新: $key=$value" config_content=$(echo -e "$config_content" | sed -E "$((service_line)),$ s|^Environment=\"$key=.*\"|Environment=\"$key=$value\"|") fi else echo "添加: $key=$value" config_content=$(echo -e "$config_content" | sed -E "$((add_line))a Environment=\"$key=$value\"") fi } # 更新或写入代理设置 update_environment "HTTP_PROXY" "$HTTP_PROXY" update_environment "HTTPS_PROXY" "$HTTPS_PROXY" update_environment "NO_PROXY" "$NO_PROXY" # 更新文件内容 echo -e "$config_content" > "$PROXY_CONF_FILE" # 重新加载 systemd 配置并重启 Docker echo "重新加载 systemd 配置并重启 Docker..." if systemctl daemon-reload && systemctl restart docker; then echo "Docker 已成功重启。" else echo "重启 Docker 失败,请检查日志。" >&2 exit 1 fi # 检查 Docker 的代理配置 echo "Docker 代理配置信息:" docker info | grep -i proxy # 拉取tf镜像 docker pull tensorflow/serving:2.12.2 |
…
【Docker】Pull 与 VPN