如何在 Amazon Linux 2 或 Amazon Linux 2023 中为 Docker 和 Amazon ECS 容器代理设置 HTTP 代理?

2 分钟阅读
0

我想在 Amazon Linux 2 或 Amazon Linux 2023 中为 Docker 和 Amazon Elastic Container Service (Amazon ECS) 容器代理设置 HTTP 代理。

解决方法

要在 Amazon Linux 2 或 Amazon Linux 2023 中为 Docker 和 Amazon ECS 容器代理设置 HTTP 代理,请完成以下步骤。

**注意:**您还可以在启动期间使用 Amazon Elastic Compute Cloud (Amazon EC2) 用户数据和用户数据脚本设置环境变量。有关适用于所有 Linux 版本的用户数据脚本,请参阅 Linux 容器实例的 HTTP 代理配置

如果您使用的是 Amazon Linux,请参阅如何在 Amazon Linux 中为 Docker 和 Amazon ECS 容器代理设置 HTTP 代理?

**重要事项:**Amazon Linux AMI(也称为 Amazon Linux 1)于 2023 年 12 月 31 日到期。最佳做法是将您的应用程序升级到 Amazon Linux 2023。

存储 IP 地址和代理服务器端口

要存储 IP 地址和代理服务器端口,请完成以下步骤:

  1. 使用 SSH 连接到 Amazon EC2 实例
  2. 以根用户身份存储代理服务器的 IP 地址和端口,以备将来在环境变量中使用。例如:
    export PROXY_SERVER_IP=x.x.x.x
    export PROXY_PORT=1234

为 Docker 进程守护程序设置 HTTP 代理

要为 Docker 进程守护程序设置 HTTP 代理,请完成以下步骤:

  1. 使用 sudo 权限运行以下命令:

    mkdir -p /etc/systemd/system/docker.service.d
    cat <<EOF > /etc/systemd/system/docker.service.d/http-proxy.conf
    [Service]
    Environment="HTTP_PROXY=http://$PROXY_SERVER_IP:$PROXY_PORT"
    Environment="HTTPS_PROXY=http://$PROXY_SERVER_IP:$PROXY_PORT"
    Environment="NO_PROXY=169.254.169.254,169.254.170.2"
    EOF

    **注意:**HTTP\ _PROXY 是 HTTP 代理的套接字地址 (IPaddress:Port),用于将 ECS 容器代理连接到互联网。

    如果设置了 HTTP\ _PROXY 变量,则必须将 NO\ _PROXY 变量设置为 169.254.169.254,169.254.170.2。此设置筛选 Amazon EC2 实例元数据、任务的 AWS Identity and Access Management (IAM) 角色以及来自代理的 Docker 进程守护程序流量。

  2. 如果因为磁盘上的 docker.service 更改需要重新加载单元,请运行以下命令:

    systemctl daemon-reload
  3. 要重启 Docker,请运行以下命令:

    systemctl restart docker.service

    **注意:**以下命令会停止所有正在运行的容器,包括 ECS 容器实例上的 ecs-agent

  4. 要验证 Docker 的 HTTP 代理设置,请运行以下命令:

    docker info | grep -i proxy

    **注意:**命令输出会有 HTTP 代理和 HTTPS 代理。

为容器代理设置 HTTP 代理

要为 Docker 进程守护程序设置 HTTP 代理,请完成以下步骤:

  1. 在现有的 /etc/ecs/ecs.config 文件中,包括使用 HTTP\ _PROXY 和 NO\ _PROXY 代理配置参数的代理配置。例如:

    cat <<EOF > /etc/ecs/ecs.config
    HTTP_PROXY=http://$PROXY_SERVER_IP:$PROXY_PORT
    NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock
    EOF
  2. 要将步骤 1 中的 HTTP 配置应用到 ecs-agent,请运行以下命令:

    systemctl restart ecs

    **注意:**如果您使用经过 Amazon ECS 优化的亚马逊机器映像(AMI),则容器代理默认通过 ecs-init 运行。

  3. 要验证 Docker 和容器代理的 HTTP 代理设置,请运行以下命令:

    docker inspect ecs-agent | grep -i proxy

    **注意:**命令输出中会有代理设置。

为 ecs-init 设置 HTTP 代理

要为 ecs-init 设置 HTTP 代理,请完成以下步骤:

  1. 使用 sudo 权限运行以下命令:

    mkdir -p /etc/systemd/system/ecs.service.d
    cat <<EOF > /etc/systemd/system/ecs.service.d/http-proxy.conf
    [Service]
    Environment="HTTPS_PROXY=$PROXY_SERVER_IP:$PROXY_PORT/"
    Environment="NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock"
    EOF
  2. 如果因为磁盘上的 docker.service 更改需要重新加载单元,请运行以下命令:

    systemctl daemon-reload
  3. 要将步骤 1 中的 HTTP 配置应用到 ecs-agent,请运行以下命令:

    systemctl restart ecs

    **注意:**Docker 和容器代理的配置仅影响当前正在运行的实例。要更新集群中的所有实例,请创建启动配置,然后使用自动扩缩组启动新实例。

相关信息

更新 Amazon ECS 容器代理

使用 Amazon EC2 用户数据引导容器实例

AWS 官方
AWS 官方已更新 6 个月前