현재 개인 네트워크 내에서 Alpine Linux를 실행하는 도커 이미지가 있습니다. 해당 도커 이미지에 대한 루트 액세스 권한이 있습니다.
동일한 프라이빗 네트워크에 데이터베이스 인스턴스가 있습니다. 동일한 네트워크에 있는 시스템만 데이터베이스에 접근할 수 있습니다. (예: 앞서 언급한 도커 이미지)
지금은 DB 내부의 내용을 디버깅하기 위해 SSH를 통해 Docker 이미지에 연결한 다음 해당 Docker 이미지 내부에서 명령줄 도구를 실행해야 했습니다. 그거 꽤 복잡해요
대신 로컬 PC 내부의 개발 도구를 사용하여 해당 데이터베이스에 연결할 수 있는 방법이 있습니까? 이 용어가 포트 포워딩인지 프록싱인지 잘 모르겠습니다.
답변1
나는 당신이 다음과 같이 연결한다고 가정합니다 :
ssh user@docker
당신은 필요합니다 -L
:
ssh -L port1:server:port2 user@docker
server:port2
도커 컨테이너에서 본 데이터베이스의 주소와 포트는 어디에 있습니까(이 주소는 확인됩니다)거기).
로컬은 ssh
TCP 포트에서 로컬로 수신 대기합니다 port1
. 포트를 선택합니다.
이제 로컬 컴퓨터에서 localhost:port1
(또는 )에 연결하면 에서 127.0.0.1:port1
연결됩니다 . 기계 는 그것이 에서 오는 것을 볼 것입니다 . 이를 "로컬 포트 포워딩"이라고 합니다.server:port2
docker
server
docker
이런 방식으로 로컬 도구가 원격 데이터베이스에 접근할 수 있습니다. 도구를 에 연결해야 합니다 localhost:port1
.
노트:
- 이는 TCP에서만 작동합니다.UDP가 아님.
- 로컬 네트워크의 다른 컴퓨터는 로컬 컴퓨터를 데이터베이스에 연결하기 위한 릴레이로 사용할 수 없습니다. 아마도 이것이 당신이 원하는 방식일 것입니다. 그렇지 않다면 다음 질문을 확인하십시오.SSH를 사용하여 로컬 네트워크에서 터널링된 리소스를 제공할 수 있나요?
ssh -N …
터널을 구축하는 데 사용원격 명령을 실행하지 않고.autossh
이를 자동화하는 데 사용합니다 .- 1024 미만의 번호를 가진 포트는 권한이 있습니다. 일반 사용자는 해당 포트에 바인딩할 수 없습니다. 그에 따라 선택하십시오
port1
. - SSH 서버의 설정(
AllowTcpForwarding
귀하 의 경우)을 사용하여 포트 전달을 허용하지 않을 수 있습니다. 기본값은 허용이므로 아마도 즉시 작동할 것입니다.sshd_config
docker