私のローカルコンピュータから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では、次のことをしないことをお勧めします。
コンテナの主な実行プロセスは、
ENTRYPOINT
Dockerfileの末尾にあるおよび/またはです。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つのボリュームを/data
2つのコンテナにマウントすることです。これにより、あるコンテナに何が含まれているのか、/data
他のコンテナに何が含まれているのかがわかります。/data