まず、SSHホストなしでDockerコンテナに直接SSH経由で接続する

まず、SSHホストなしでDockerコンテナに直接SSH経由で接続する

私のローカルコンピュータからssh:経由でリモートVPSに接続します。ssh [email protected]

この VPS では、Docker コンテナ (たとえば、docker pull nvidia/cuda:11.4.0-devel-ubuntu18.04)docker run -itd --name test nvidia/cuda:11.4.0-devel-ubuntu18.04 ...が実行されています。

Local computer -> VPS (1.2.3.4) -> Docker container

SSHを介して自分のローカルコンピュータから直接このコンテナに接続し、bashプロンプトを直接インポートする標準的な方法は何ですか?

ワンステップで完了できますか?変える:

ssh [email protected]
docker attach test

同じように、SFTP(Filezillaを使用するなど)を使用してローカルコンピュータからDockerコンテナを接続したいと思います。

ベストアンサー1

Dockerは仮想マシンではなく、1リモートマシンからコンテナに直接接続する標準的な方法はありません。実際、dockerはこれらの動作を積極的に推奨しません。

要求されたタスクを実行するには、含める必要があるすべてのアプリケーションと共にコンテナ内でSSHサーバーを実行する必要があります。 Dockerでは、次のことをしないことをお勧めします。

コンテナで複数のサービスを実行する

コンテナの主な実行プロセスは、ENTRYPOINTDockerfileの末尾にあるおよび/またはです。CMD一般的に、以下を使用して関心領域を分離することをお勧めします。コンテナごとに1つのサービス

また、容器を使い捨てとして扱うように努力する必要があります。つまり、docker container rm ...復元できないものは絶対に破壊しないでくださいdocker run ...。コンテナを手動で編集またはアップロードする場合(ロールではない)これにより、コンテナが破棄されるかどうかが最も心配されます。

状況を異なって考えてみてください...

私はあなたが達成したいことがファイルをコンテナに簡単にアップロード/ダウンロードすることだと思いますnvidia/cuda。これを達成する方法は2つあります。

1 - ホストに直接バインドマウントとssh / scpを使用します。

バインドマウントホストとコンテナ間でディレクトリが共有されます。非常に簡単にホストにSSHで接続することで、ホスト上でこれらのファイルを参照できます。ホスト上のすべてのファイルはコンテナのファイルと同じです(コピーではありません)。したがって、変更した内容はコンテナにすぐに表示されます。

2 - 共有ボリュームまたはバインドマウントを持つ2つのコンテナの使用

ホストインスタンスからSSHインスタンスを分離するには、2番目のコンテナを使用してSSHサーバーを実行できます。この写真)には、コンテナと同じバインドマウントまたはドッカーボリュームがありますnvidia/cuda

SSHクライアントによってボリューム上で変更されたすべてのファイルはコピーではなく同じファイルであるため、デフォルトの「nvidia / cuda」コンテナに表示されます。

これを行うときの一般的なパターンは、1つのボリュームを/data2つのコンテナにマウントすることです。これにより、あるコンテナに何が含まれているのか、/data他のコンテナに何が含まれているのかがわかります。/data

おすすめ記事