Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

HTTP 代理配置

您可以将 Amazon ECS 容器实例配置为对 Amazon ECS 容器代理和 Docker 守护程序使用 HTTP 代理。如果您的容器实例无法通过 Amazon VPC Internet 网关、NAT 网关或实例访问外部网络,则这非常有用。用于 Linux 和 Windows 实例的过程有所不同,因此请务必阅读下面适用于您的应用程序的部分。

Linux 容器实例配置

要将 Amazon ECS Linux 容器实例配置为使用 HTTP 代理,请在启动时在 /etc/ecs/ecs.config/etc/init/ecs.override/etc/sysconfig/docker 文件中设置以下变量 (利用 Amazon EC2 用户数据) 来达到此目的。您也可以手动编辑配置文件并重新启动代理。

/etc/ecs/ecs.config
HTTP_PROXY=10.0.0.131:3128

将此值设置为某个 HTTP 代理的主机名 (或 IP 地址) 和端口号,供 ECS 代理用来连接到 Internet。例如,在容器实例无法通过 Amazon VPC Internet 网关、NAT 网关或实例访问外部网络时。

NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock

将此值设置为 169.254.169.254,169.254.170.2,/var/run/docker.sock 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 守护程序流量。

/etc/init/ecs.override
env HTTP_PROXY=10.0.0.131:3128

将此值设置为某个 HTTP 代理的主机名 (或 IP 地址) 和端口号,供 ecs-init 代理用来连接到 Internet。例如,在容器实例无法通过 Amazon VPC Internet 网关、NAT 网关或实例访问外部网络时。

env NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock

将此值设置为 169.254.169.254,169.254.170.2,/var/run/docker.sock 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 守护程序流量。

/etc/sysconfig/docker
export HTTP_PROXY=10.0.0.131:3128

将此值设置为某个 HTTP 代理的主机名 (或 IP 地址) 和端口号,供 Docker 守护程序用来连接到 Internet。例如,在容器实例无法通过 Amazon VPC Internet 网关、NAT 网关或实例访问外部网络时。

export NO_PROXY=169.254.169.254

将此值设置为 169.254.169.254 可筛选来自代理的 EC2 实例元数据。

在以上文件中设置这些环境变量仅影响 Amazon ECS 容器代理、ecs-init 和 Docker 守护程序。它们不配置任何其他服务 (如 yum) 使用代理。

例 Linux HTTP 代理用户数据脚本

下面的示例用户数据 cloud-boothook 脚本会将 Amazon ECS 容器代理、ecs-init、Docker 守护程序和 yum 配置为使用您指定的 HTTP 代理。您还可以指定容器实例在其中自行进行注册的群集。

要在启动容器实例时使用此脚本,请执行启动 Amazon ECS 容器实例步骤 7中的步骤。然后,将下面的 cloud-boothook 脚本复制并粘贴到 User data 字段中 (请务必将红色示例值替换为您自己的代理和群集信息)。

#cloud-boothook # Configure Yum, the Docker daemon, and the ECS agent to use an HTTP proxy # Specify proxy host, port number, and ECS cluster name to use PROXY_HOST=10.0.0.131 PROXY_PORT=3128 CLUSTER_NAME=proxy-test # Set Yum HTTP proxy if [ ! -f /var/lib/cloud/instance/sem/config_yum_http_proxy ]; then echo "proxy=http://$PROXY_HOST:$PROXY_PORT" >> /etc/yum.conf echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_yum_http_proxy fi # Set Docker HTTP proxy if [ ! -f /var/lib/cloud/instance/sem/config_docker_http_proxy ]; then echo "export HTTP_PROXY=http://$PROXY_HOST:$PROXY_PORT/" >> /etc/sysconfig/docker echo "export NO_PROXY=169.254.169.254" >> /etc/sysconfig/docker echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_docker_http_proxy fi # Set ECS agent HTTP proxy if [ ! -f /var/lib/cloud/instance/sem/config_ecs-agent_http_proxy ]; then echo "ECS_CLUSTER=$CLUSTER_NAME" >> /etc/ecs/ecs.config echo "HTTP_PROXY=$PROXY_HOST:$PROXY_PORT" >> /etc/ecs/ecs.config echo "NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock" >> /etc/ecs/ecs.config echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_ecs-agent_http_proxy fi # Set ecs-init HTTP proxy if [ ! -f /var/lib/cloud/instance/sem/config_ecs-init_http_proxy ]; then echo "env HTTP_PROXY=$PROXY_HOST:$PROXY_PORT" >> /etc/init/ecs.override echo "env NO_PROXY=169.254.169.254,169.254.170.2,/var/run/docker.sock" >> /etc/init/ecs.override echo "$$: $(date +%s.%N | cut -b1-13)" > /var/lib/cloud/instance/sem/config_ecs-init_http_proxy fi

Windows 容器实例配置

要将 Amazon ECS Windows 容器实例配置为使用 HTTP 代理,请在启动时设置以下变量 (利用 Amazon EC2 用户数据) 来达到此目的。

[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.mydomain:port", "Machine")

HTTP_PROXY 设置为某个 HTTP 代理的主机名 (或 IP 地址) 和端口号,供 ECS 代理用来连接到 Internet。例如,在容器实例无法通过 Amazon VPC Internet 网关、NAT 网关或实例访问外部网络时。

[Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine")

NO_PROXY 设置为 169.254.169.254,169.254.170.2,\\.\pipe\docker_engine 可筛选 EC2 实例元数据、任务的 IAM 角色以及来自代理的 Docker 守护程序流量。

例 Windows HTTP 代理用户数据脚本

下面的示例用户数据 PowerShell 脚本会将 Amazon ECS 容器代理和 Docker 守护程序配置为使用您指定的 HTTP 代理。您还可以指定容器实例在其中自行进行注册的群集。

要在启动容器实例时使用此脚本,请执行步骤 2:在集群中启动 Windows 容器实例中的步骤。在您到达步骤 9 时,将下面的 PowerShell 脚本复制并粘贴到用户数据字段中 (请务必将红色示例值替换为您自己的代理和群集信息)。

注意

启用任务的 IAM 角色需要使用 -EnableTaskIAMRole 选项。有关更多信息,请参阅 任务的 Windows IAM 角色

<powershell> Import-Module ECSTools $proxy = "http://proxy.mydomain:port" [Environment]::SetEnvironmentVariable("HTTP_PROXY", $proxy, "Machine") [Environment]::SetEnvironmentVariable("NO_PROXY", "169.254.169.254,169.254.170.2,\\.\pipe\docker_engine", "Machine") Restart-Service Docker Initialize-ECSAgent -Cluster MyCluster -EnableTaskIAMRole </powershell>