サーバー運用のヒント:SSHトンネルとDockerネットワーク設定
リモートのLinuxサーバーを保守するときに、SSHリバーストンネル経由でローカルのプロキシを一時的に利用し、コードのダウンロード、依存パッケージのインストール、Dockerイメージの取得を行う手順を記録します。
以下では、サーバー上の転送ポート 127.0.0.1:7890 を例に、ShellとDockerデーモンのネットワークプロキシをそれぞれ設定し、作業終了後に一時設定を解除します。
1. ローカルPC/クラウドサーバーの準備(Clash/パスワード+SSHが許可されていること)
Clash の画面を開きます。
- ポート番号をメモしておく : 「混合ポート(Mixed Port)」が 7890(デフォルト値)であることを確認してください。
- サーバーのSSH設定を確認する : これまで接続したことがない場合は、以下の点をご確認ください。
/etc/ssh/sshd_configパスワードによるログインが許可されています (PasswordAuthentication yes),そうしないとトンネルを確立できない可能性があります。
2. トンネルの作成(ローカル端末で実行)
Windows PowerShell(またはCMD)を開き、以下のコマンドを実行して接続を確立します。 注意:このウィンドウは閉じないでください。閉じるとインターネット接続が切断されます。
ssh -N -R 远程端口:本地IP:本地端口 用户名@服务器IP
- もし~に遭遇した場合は
Permission denied、アカウント名とパスワードを確認し、上記の SSH 設定が読み込まれていることを確認してください (service ssh restart)。 - 成功の兆候: パスワードを入力してEnterキーを押した後、カーソルが動かなくなる/エラーが表示されない。
3. サーバー側の設定(サーバーのターミナルで実行)
シナリオ A:日常的なダウンロード (curl、wget、git、Pythonのpip)
この設定は一時的なものであり、ウィンドウを閉じると無効になります。ログインするたびに、再度入力する必要があります。
方法 1:手動での設定
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
方法 2:手っ取り早いスクリプト(推奨)
覚えられるディレクトリに、上記の設定をあらかじめshファイルに記述しておけば、直接読み込んで使用することができます(例: ~/ops-scripts/ ):
- プロキシを有効にする:
source ~/ops-scripts/proxy_on.sh - プロキシを無効にする:
source ~/ops-scripts/proxy_off.sh
検証コマンド:
curl -I https://www.google.com
(200 OK を返す必要があります)
Docker には追加の設定が必要です。その理由は以下の通りです: Shell の環境変数プロキシ (export ...) Docker デーモンプロセスには適用されない 、その結果、イメージの取得ができなくなりました。
シナリオ B:Docker イメージの高速化
Alibaba Cloudの公式ミラーリング高速化サービスの利用をお勧めします(SSHプロキシを経由するよりも安定しています)。
Alibaba Cloudにログインして、専用の高速化アドレスを取得してください: Alibaba Cloud コンテナイメージサービスのコンソール (同様のものを取得する
https://xxxx.mirror.aliyuncs.com(住所)設定ファイルの編集: プロファイルのパス:
/etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
シナリオ C:Docker で SSH プロキシを使用する(上級編:SSH トンネル経由でイメージを取得する)
Alibaba Cloudのイメージにリソースがなく、一時的にSSHトンネル(127.0.0.1:7890)を介してDockerイメージを取得する必要がある場合に使用します。
1. 原理:なぜ Shell プロキシは Docker では機能しないのか?
- Shell (ターミナル):
export http_proxy単にフロントエンド端末にプロキシを設定しただけで、curl/wget有効です。 - Docker デーモン(バックグラウンド) :イメージの取得はバックグラウンドサービスで行われます
dockerd実行する際、このプログラムはターミナルの環境変数を認識できないため、別途設定を行う必要があります。
2. 設定手順(プロキシの有効化)
手順1:設定ディレクトリを作成する
sudo mkdir -p /etc/systemd/system/docker.service.d
ステップ2:プロキシ設定の書き込み
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<-'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,.aliyuncs.com"
EOF
注意:
NO_PROXYDockerがローカルまたはAlibaba Cloudのイメージにアクセスする際にも迂回しないようにするため。
ステップ3:設定を再読み込みし、Dockerを再起動する
sudo systemctl daemon-reload
sudo systemctl restart docker
ステップ4:検証
sudo docker info | grep Proxy
# 应输出:
# HTTP Proxy: http://127.0.0.1:7890
# HTTPS Proxy: http://127.0.0.1:7890
検証に合格すれば、正常に実行できます sudo docker pull。
注意 🚨:
- このファイルを設定するだけで、 Docker は常にローカルマシンの SSH プロキシに依存することになります 。ローカルのSSHトンネルを切断したり、システムをシャットダウンしたりすると、Dockerによるイメージのプル操作でエラー(タイムアウト)が発生します。
- 権限の問題 :Docker デーモンは高い権限を持っているため、一般ユーザーがコマンドを実行すると、次のような問題が発生する可能性があります
Permission Denied、追加してくださいsudo。- そのため、ダウンロード終了後にクリーンアップを行う必要があります。↓↓↓
3. クリーンアップの手順(プロキシを無効にする - 使用後は削除することを推奨)
ダウンロードが完了したら、設定を削除して、Dockerを「元の状態」に戻すことをお勧めします。
# 1. 删除配置文件
sudo rm -f /etc/systemd/system/docker.service.d/http-proxy.conf
# 2. 重载配置
sudo systemctl daemon-reload
# 3. 重启 Docker
sudo systemctl restart docker
確認:再度実行する sudo docker info | grep Proxy、出力はないはずである。

