ssh ポート マッピング - ローカルにマッピングされたターゲット ホストにマッピングされた Docker コンテナ内の jupyter にアクセスします

バックグラウンド:

私のコンピュータはローカル ホストで、同僚のコンピュータ (3080TI) はターゲット ホストです。システムにはコンテナがあります。ターゲット ホストのコンテナに接続する必要があり、グラフィカル インターフェイスまたはフォルダ ディレクトリが必要です。vscode または SFTP クライアントのみを使用すると、コンテナー内のファイルとグラフィカル インターフェイスを表示できないため、jupyter を使用してコンテナー内のフォルダーにアクセスすることを検討しました。

ただし、現在、コンテナーのデスクトップへのアクセスには VNC メソッドが使用されており、この記事は記録のみを目的としています。

(メッセージ 1 件) vnc はリモート サーバーの Docker コンテナのデスクトップに接続します


ターゲットホストにローカルにマッピングする

新しい PowerShell を作成し、次のコードを実行し、ターミナルを開き、ssh コマンドの -L パラメーターを使用して、ローカル マシンのポート 8888 をリモート ホストのポート 8888 にマップします。

 ssh -L 8888:127.0.0.1:8888 [email protected]

 sshのフォーマットは以下の通りです。このうち、ローカル アドレスは通常ローカル マシンであり、直接無視できます。デフォルトは localhost です。2 つのホスト間のマッピングには、ターゲット ホストのアドレス (127.0.0.1) を入力する必要があります。

ssh -L 本地地址:本地端口:目标地址:目标端口 用户名@跳板机地址

コンテナの実行ステータスを確認し、コンテナを有効にして、任意のターミナルからコンテナに入力します。

# 查看当前所有容器:已运行、未运行的
docker container ls -a
# 若容器时up状态,则直接exec进入容器,忽略第一行。
docker start ybd
docker exec -it ybd bash

コンテナが ssh サービスを有効にしているかどうかを確認します。前の手順でコンテナーが稼働状態にあり、ssh 状態が有効であることがわかっている場合は、ssh サービスを開始するコマンドを追加で実行する必要はありません。

service ssh start # 启动ssh服务
ps -e | grep ssh #查看ssh服务是否启动

 最初の手順で開いたターミナルで次のコードを実行し (ポート マッピングを完了するため)、SSH を使用してコンテナに接続し、コンテナをターゲット ホストに転送します。これはローカル マシン (ターゲット ホスト) によって転送され、ターゲット アドレスは踏み台マシンと一致するため、ターゲット アドレスには localhost が直接埋められます。

# 下面两句含义相同,本机转发,本机地址为127.0.0.1
ssh -L 8888:127.0.0.1:8888 [email protected] -p 8080
ssh -L 8888:localhost:8888 [email protected] -p 8080

コンテナに接続したら、まず設定ファイルを生成します。

$jupyter notebook --generate-config

初回接続時にパスワードを生成する必要があるので、jupyter Notebookへのリモートアクセス - Echo/ - Blog Garden (cnblogs.com)を参照し、操作に従ってパスワードを生成した後、~/.jupyter/jupyter_notebook_configを開く必要があります。構成用の py:

vim ~/.jupyter/jupyter_notebook_config.py

 いくつかのコンテンツを追加します。「sha1:854d1...」を前の手順で生成したキーに置き換えることに注意してください。

c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha1:854d183417ac:db1e783bde7bbab704d009c996e93dc2d3e31c25'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888

jupyter 構成ファイルを構成した後、jupyter を実行します。

jupyter notebook --allow-root

次の結果が表示されます。

 ブラウザを開いて「localhost:8888」と入力し、ローカル ホストにマッピングされたターゲット ホストにマッピングされた Docker コンテナにアクセスします。

また問題もあります。jupyter のデフォルトのパスがターゲット ホストにコンテナがマウントされているパスではない可能性があるため、jupyter_notebook_config.py を再度開いてデフォルトのパスを変更する必要があります。

vim ~/.jupyter/jupyter_notebook_config.py

「/」を押して「c.NotebookApp.notebook_dir」を見つけます。

デフォルトは次のとおりです。  

# c.NotebookApp.notebook_dir = ''

必要に応じて次のように変更します。

c.NotebookApp.notebook_dir = '/'

デフォルトのパスが正常に変更されました。


 やっと!とても重要です!

jupyter を終了するたびに、通常の手順に従って終了する必要があります。そうしないと、ポートは開いたままになり、次回コンテナがマップされるときに 8888 にアクセスできなくなり、8889 に延期されます。正常に接続できません!

予期せず終了した場合、最も効率的な方法はコンテナを再起動することです。

参考:

Docker: Docker で jupyter Notebook をエレガントに使用する方法 (シャープ ツール) - Felaim のブログ - CSDN ブログ

SSHポートフォワーディングでJupyter Notebookのリモート接続を実現server_ID_AF12のブログ-CSDN Blog_jupyter Notebookのポートフォワーディング

おすすめ

転載: blog.csdn.net/weixin_41467446/article/details/125216873