跳至內容

如何在 Amazon Linux 2 或 Amazon Linux 2023 中,為 Docker 和 Amazon ECS 容器代理程式設定 HTTP Proxy?

2 分的閱讀內容
0

我想要為 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 伺服器連接埠,請完成以下步驟:

  1. 使用 SSH 連線到 Amazon EC2 執行個體
  2. 以根使用者身分,儲存 Proxy 伺服器的 IP 位址和連接埠,以供日後在環境變數中使用。例如:
    export PROXY_SERVER_IP=x.x.x.x
    export PROXY_PORT=1234

為 Docker 常駐程式設定 HTTP Proxy

若要為 Docker 常駐程式設定 HTTP Proxy,請完成以下步驟:

  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 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 常駐程式流量。

  2. 若因為 docker.service 在磁碟上的變更而需要重新載入單元,請執行以下命力:

    systemctl daemon-reload
  3. 若要重新啟動 Docker,請執行以下命令:

    systemctl restart docker.service

    **注意:**上述命令會停止所有正在執行的容器,包括 ECS 容器執行個體上的 ecs-agent

  4. 若要確認 Docker 的 HTTP Proxy 設定,請執行以下命令:

    docker info | grep -i proxy

    **注意:**命令的輸出結果會顯示 HTTP Proxy 和 HTTPS Proxy。

設定容器代理程式的 HTTP Proxy

若要為 Docker 常駐程式設定 HTTP Proxy,請完成以下步驟:

  1. 在您現有的 /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
  2. 若要將步驟 1 中的 HTTP 組態套用到 ecs-agent,請執行以下命令:

    systemctl restart ecs

    **注意:**如果您使用針對 Amazon ECS 最佳化的 Amazon Machine Image (AMI),則容器代理程式會預設透過 ecs-init 運作。

  3. 若要確認 Docker 和容器代理程式的 HTTP Proxy 設定,請執行以下命令:

    docker inspect ecs-agent | grep -i proxy

    **注意:**Proxy 設定會顯示在命令輸出結果中。

設定 ecs-init 的 HTTP Proxy

若要為 ecs-init 設定 HTTP Proxy,請完成以下步驟:

  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 和容器代理程式的組態只會影響目前正在執行的執行個體。若要更新叢集中的所有執行個體,請建立啟動組態,然後使用 Auto Scaling 群組啟動新執行個體。

相關資訊

更新 Amazon ECS 容器代理程式

使用 Amazon EC2 使用者資料引導容器執行個體

AWS 官方已更新 2 年前