짧은 답변
보통은 Docker 컨테이너에 직접 SSH 하지 않습니다 ── 호스트에 SSH 한 다음 docker exec로 컨테이너 안에서 셸을 엽니다. 컨테이너는 기본적으로 SSH 서버를 실행하지 않습니다(그리고 일반적으로 실행해서도 안 됩니다: 이미지를 비대하게 만들고 공격 표면을 넓힙니다). 노트북에서든 휴대폰에서든 표준 패턴은 동일합니다: 호스트에 SSH → docker exec -it <container> bash. 이 글에서는 그 흐름, 컨테이너 내 SSH가 정당한 예외, 그리고 흔한 오류를 다룹니다.
표준 방법: SSH 위의 docker exec
# 1. SSH into the Docker host
ssh user@host
# 2. find the container
docker ps
# 3. open a shell inside it
docker exec -it mycontainer bash
# minimal images may not have bash:
docker exec -it mycontainer sh 이게 전부입니다 ── 컨테이너 안에 SSH 서버 없이, 컨테이너 내부 셸에 들어와 있습니다. exit로 호스트로 돌아갑니다. 일회성 명령이라면 셸을 열 필요조차 없습니다: docker exec mycontainer cat /etc/nginx/nginx.conf.
누구나 겪는 두 가지 오류
OCI runtime exec failed: "bash": executable file not found── 이미지에 bash가 없습니다(Alpine과 distroless 이미지). 대신sh를 사용하세요. 정말 최소한/distroless 이미지에는 셸이 아예 없을 수도 있습니다.container ... is not running──exec는 실행 중인 컨테이너에만 작동합니다.docker ps -a를 확인하고, 종료되었다면 먼저docker logs mycontainer로 이유를 읽으세요.
Docker Compose에서
docker compose exec api sh # service name, not container name
docker compose logs -f api # and the logs, while you're there 휴대폰에 더 친화적인 Docker 워크플로우는 휴대폰에서 Docker 관리하기를 참고하세요.
컨테이너 내 SSH가 실제로 정당한 경우
몇 가지 실제 사례가 존재합니다: 컨테이너 자체가 SSH 서비스인 경우(git 서버, sftp 엔드포인트, 포트 2222로 노출하는 개발 환경 컨테이너), 또는 exec 접근이 불가능한 플랫폼. 그럴 때는 이미지 안에서 sshd를 실행하고 포트를 게시하며(-p 2222:22), 다른 서버와 똑같이 다룹니다: 키 인증만, root 로그인 금지. 그 외 모든 경우에는 docker exec가 더 간단하고 안전합니다.
휴대폰에서, 타이핑을 줄여서
컨테이너 이름과 exec 플래그는 바로 휴대폰에서 입력하기 성가신 종류입니다. 두 가지가 도움이 됩니다: docker ps / docker exec -it … sh를 스니펫으로 저장하기, 그리고 어시스턴트에게 묻기 ── "postgres 컨테이너에서 셸 열어줘" ── TermAI가 지금 있는 호스트에 맞춰 정확한 명령을 제안합니다(최근 출력을 보고 있으므로 마지막 docker ps의 실제 컨테이너 이름을 알고 있습니다).
자주 묻는 질문
Docker 컨테이너에 어떻게 SSH 하나요?
보통은 하지 않습니다 ── Docker 호스트에 SSH 한 다음 docker exec -it container bash(또는 sh)를 실행합니다. 컨테이너는 기본적으로 SSH 서버를 실행하지 않습니다.
왜 docker exec가 "bash: executable file not found"라고 하나요?
이미지에 bash가 포함되어 있지 않습니다(Alpine에서 흔합니다). docker exec -it container sh를 사용하세요.
중지된 컨테이너에 exec 할 수 있나요?
아니요 ── exec에는 실행 중인 컨테이너가 필요합니다. docker logs로 종료 이유를 확인하거나, 셸을 엔트리포인트로 한 새 컨테이너를 docker run 하여 이미지를 살펴보세요.
컨테이너에 sshd를 설치해야 하나요?
일반적으로 아니요 ── 이미지를 비대하게 만들고 공격 표면을 늘립니다. 예외는 목적이 SSH 서비스인 컨테이너거나, exec 접근이 없는 플랫폼입니다.
핵심 요약
- 표준 패턴: 호스트에 SSH →
docker exec -it <name> bash(또는sh) - bash가 없다? Alpine/최소 이미지:
sh사용 - 실행 중이 아니다?
exec에는 살아 있는 컨테이너가 필요 ── 먼저docker logs - 컨테이너 내 sshd: 컨테이너의 역할이 SSH 서비스일 때만
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.