我想要為 Amazon Linux 2 或 Amazon Linux 2023 中的 Docker 和 Amazon Elastic Container Service (Amazon ECS) 容器代理程式設定 HTTP Proxy。
解決方法
若要為 Amazon Linux 2 或 Amazon Linux 2023 中的 Docker 和 Amazon ECS 容器代理程式設定 HTTP Proxy,請完成以下步驟。
**注意:**您也可以在啟動期間,使用 Amazon Elastic Compute Cloud (Amazon EC2) 使用者資料和使用者資料指令碼設定環境變數。對於所有 Linux 版本適用的使用者資料指令碼,請參閱Linux 容器執行個體的 HTTP Proxy 組態。
如果您使用的是 Amazon Linux,請參閱如何在 Amazon Linux 中為 Docker 和 Amazon ECS 容器代理程式設定 HTTP Proxy?
**重要:**Amazon Linux AMI (也稱為 Amazon Linux 1) 已於 2023 年 12 月 31 日終止支援。最佳實務是將您的應用程式升級到 Amazon Linux 2023。
儲存 IP 位址和 Proxy 伺服器連接埠
若要儲存 IP 位址和 Proxy 伺服器連接埠,請完成以下步驟:
- 使用 SSH 連線到 Amazon EC2 執行個體。
- 以根使用者身分,儲存 Proxy 伺服器的 IP 位址和連接埠,以供日後在環境變數中使用。例如:
export PROXY_SERVER_IP=x.x.x.x
export PROXY_PORT=1234
為 Docker 常駐程式設定 HTTP Proxy
若要為 Docker 常駐程式設定 HTTP Proxy,請完成以下步驟:
-
使用 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 Proxy 的 socket 位址 (IPaddress:Port),用於將 ECS 容器代理程式連接到網際網路。
如果已設定 HTTP_PROXY 變數,則必須將 NO_PROXY 變數設為 169.254.169.254,169.254.170.2。此設定會篩選來自 Proxy 的 Amazon EC2 執行個體中繼資料、任務的 AWS Identity and Access Management (IAM) 角色,以及 Docker 常駐程式流量。
-
若因為 docker.service 在磁碟上的變更而需要重新載入單元,請執行以下命力:
systemctl daemon-reload
-
若要重新啟動 Docker,請執行以下命令:
systemctl restart docker.service
**注意:**上述命令會停止所有正在執行的容器,包括 ECS 容器執行個體上的 ecs-agent。
-
若要確認 Docker 的 HTTP Proxy 設定,請執行以下命令:
docker info | grep -i proxy
**注意:**命令的輸出結果會顯示 HTTP Proxy 和 HTTPS Proxy。
設定容器代理程式的 HTTP Proxy
若要為 Docker 常駐程式設定 HTTP Proxy,請完成以下步驟:
-
在您現有的 /etc/ecs/ecs.config 檔案中,使用 HTTP_PROXY 和 NO_PROXY 代理程式組態參數來包含 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
-
若要將步驟 1 中的 HTTP 組態套用到 ecs-agent,請執行以下命令:
systemctl restart ecs
**注意:**如果您使用針對 Amazon ECS 最佳化的 Amazon Machine Image (AMI),則容器代理程式會預設透過 ecs-init 運作。
-
若要確認 Docker 和容器代理程式的 HTTP Proxy 設定,請執行以下命令:
docker inspect ecs-agent | grep -i proxy
**注意:**Proxy 設定會顯示在命令輸出結果中。
設定 ecs-init 的 HTTP Proxy
若要為 ecs-init 設定 HTTP Proxy,請完成以下步驟:
-
使用 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
-
若因為 docker.service 在磁碟上的變更而需要重新載入單元,請執行以下命力:
systemctl daemon-reload
-
若要將步驟 1 中的 HTTP 組態套用到 ecs-agent,請執行以下命令:
systemctl restart ecs
**注意:**Docker 和容器代理程式的組態只會影響目前正在執行的執行個體。若要更新叢集中的所有執行個體,請建立啟動組態,然後使用 Auto Scaling 群組啟動新執行個體。
相關資訊
更新 Amazon ECS 容器代理程式
使用 Amazon EC2 使用者資料引導容器執行個體