Docker と Amazon Elastic Container Service (Amazon ECS) コンテナエージェントの HTTP プロキシを Amazon Linux 2 か Amazon Linux 2023 に設定したいと考えています。
解決方法
Docker と Amazon ECS コンテナエージェントの HTTP プロキシを Amazon Linux 2 か Amazon Linux 2023 に設定するには、次の手順を実行します。
注: 起動時にユーザーデータスクリプトを使用し、Amazon Elastic Compute Cloud (Amazon EC2) ユーザーデータによって環境変数を設定することもできます。Linux のすべてのバージョンで機能するユーザーデータスクリプトについては、「Linux コンテナインスタンスの HTTP プロキシ設定」を参照してください。
Amazon Linux を使用している場合は、「Docker と Amazon ECS コンテナエージェントの HTTP プロキシを Amazon Linux 2 か Amazon Linux 2023 に設定するにはどうすればよいですか?」を参照してください。
重要: Amazon Linux AMI (Amazon Linux 1 ともいいます) は、2023年12月31日にサポートが終了しました。アプリケーションを Amazon Linux 2023 にアップグレードするのがベストプラクティスです。
IP アドレスとプロキシサーバーポートを保存する
IP アドレスとプロキシサーバーポートを保存するには、次の手順を実行します。
- SSH を使用して Amazon EC2 インスタンスに接続します。
- ルートユーザーとして、プロキシサーバーの IP アドレスとポートを後で使用できるように環境変数に保存します。たとえば、次のようにします。
export PROXY_SERVER_IP=x.x.x.x
export PROXY_PORT=1234
Docker デーモンの HTTP プロキシーをセットアップする
Docker デーモンの HTTP プロキシーをセットアップするため、次の手順を実行します。
-
次のコマンドを 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 は、ECS コンテナエージェントをインターネットに接続するために使用される HTTP プロキシのソケットアドレス (IPaddress:Port) です。
HTTP_PROXY 変数が設定されている場合は、NO_PROXY 変数を 169.254.169.254,169.254.170.2 に設定する必要があります。この設定により、Amazon EC2 インスタンスのメタデータ、タスクの AWS Identity and Access Management (IAM) ロール、プロキシからの Docker デーモントラフィックがフィルタリングされます。
-
ディスクの docker.service が変更されたので、ユニットをリロードするため、次のコマンドを実行します。
systemctl daemon-reload
-
Docker を再起動するため、次のコマンドを実行します。
systemctl restart docker.service
注: 前述のコマンドでは、ECS コンテナインスタンスの ecs-agent を含め、実行中のコンテナをすべて停止します。
-
Docker の HTTP プロキシ設定を確認するため、次のコマンドを実行します。
docker info | grep -i proxy
注: コマンド出力には、HTTP プロキシと HTTPS プロキシが表示されます。
コンテナエージェントの HTTP プロキシをセットアップする
Docker デーモンの HTTP プロキシーをセットアップするため、次の手順を実行します。
-
既存の /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
-
手順1の HTTP 設定を ecs-agent に適用するため、次のコマンドを実行します。
systemctl restart ecs
注: Amazon ECS に最適化した Amazon マシンイメージ (AMI) を使用する場合、コンテナエージェントはデフォルトで ecs-init によって実行されます。
-
Docker とコンテナエージェントの HTTP プロキシ設定を確認するため、次のコマンドを実行します。
docker inspect ecs-agent | grep -i proxy
注: プロキシ設定はコマンド出力に表示されます。
ecs-init の HTTP プロキシをセットアップする
ecs-init の HTTP プロキシをセットアップするには、次の手順を実行します。
-
次のコマンドを 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 ユーザーデータによるコンテナインスタンスのブートストラップ