먼저 SSH 호스트 없이 Docker 컨테이너에 직접 SSH를 통해 연결

먼저 SSH 호스트 없이 Docker 컨테이너에 직접 SSH를 통해 연결

내 로컬 컴퓨터에서 ssh: 를 통해 원격 VPS에 연결합니다.ssh [email protected]

이 VPS에서는 도커 컨테이너(예: docker pull nvidia/cuda:11.4.0-devel-ubuntu18.04docker 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일반적으로 다음을 사용하여 관심 영역을 분리하는 것이 좋습니다.컨테이너당 하나의 서비스.

또한 용기를 일회용으로 취급하도록 노력해야 합니다. 즉, docker container rm ...복원할 수 없는 것은 절대로 파괴하지 마십시오 docker run .... 컨테이너를 수동으로 편집하거나 업로드하려는 경우(롤은 아님)그러면 컨테이너가 파기되는지 여부가 가장 걱정될 것입니다.

상황을 다르게 생각해보세요...

나는 당신이 달성하고 싶은 것이 파일을 컨테이너에 쉽게 업로드/다운로드하는 것이라고 믿습니다 nvidia/cuda. 이를 달성하는 방법에는 두 가지가 있습니다.

1 - 호스트에 직접 바인드 마운트 및 ssh/scp를 사용합니다.

바인드 마운트호스트와 컨테이너 간에 디렉터리가 공유됩니다. 매우 간단하게 호스트에 SSH로 접속하여 호스트에서 이러한 파일을 찾아볼 수 있습니다. 호스트의 모든 파일은 컨테이너의 파일과 동일합니다(사본 아님). 따라서 변경한 내용은 컨테이너에 즉시 표시됩니다.

2 - 공유 볼륨 또는 바인드 마운트가 있는 두 개의 컨테이너 사용

호스트 인스턴스에서 SSH 인스턴스를 격리하려면 두 번째 컨테이너를 사용하여 SSH 서버를 실행할 수 있습니다(예:이 사진)에는 컨테이너와 동일한 바인드 마운트 또는 도커 볼륨이 있습니다 nvidia/cuda.

SSH 클라이언트에 의해 볼륨에서 변경된 모든 파일은 복사본이 아니라 동일한 파일이기 때문에 기본 "nvidia/cuda" 컨테이너에서 볼 수 있습니다.

이 작업을 수행할 때 일반적인 패턴은 하나의 볼륨을 /data두 개의 컨테이너에 마운트하는 것입니다. 이렇게 하면 한 컨테이너에 무엇이 들어 있는지, /data다른 컨테이너에 무엇이 있는지 알 수 있습니다./data

관련 정보