가장 중요한 구분:
root@hermes는 보통 VPS host shell이고,
root@c2082f6be64b처럼 이상한 짧은 hostname은 container 내부일 가능성이 큽니다.
Docker 명령어 docker ps, docker exec, docker cp는 보통 host shell에서 실행합니다.
1. 내가 host인지 container인지 확인
명령어가 헛갈릴 때는 먼저 현재 위치와 hostname을 확인합니다.
현재 shell 정보 확인
hostname
whoami
pwd
cat /etc/hostname
Docker가 보이면 host일 가능성이 큼
docker ps
판단 기준:
-
-
-
-
docker ps가 정상 출력되면 보통 host입니다.-
docker: command not found 또는 Docker daemon 접근 불가면 container 내부일 가능성이 있습니다.-
root@hermes는 host, root@c2082f6be64b 같은 이름은 container일 가능성이 큽니다.
2. Container 목록 보기
실행 중인 container 보기
docker ps
보기 좋게 출력
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}'
중지된 container까지 모두 보기
docker ps -a
이름으로 찾기
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}' | grep -i hermes
Container ID는
c2082f6be64b처럼 짧게 써도 됩니다. Container name이 있으면 name을 쓰는 것이 더 기억하기 쉽습니다.
3. Container 안으로 들어가기
기본: bash로 들어가기
docker exec -it <CONTAINER_ID_OR_NAME> bash
bash가 없으면 sh로 들어가기
docker exec -it <CONTAINER_ID_OR_NAME> sh
Michael runtime 예시
docker exec -it c2082f6be64b bash
특정 폴더로 바로 들어가기
docker exec -it c2082f6be64b bash -lc 'cd /opt/data/hermes-memory-platform/files/gmail/19f762058fdf5aa5 && exec bash'
문법 설명
docker exec
이미 실행 중인 container 안에서 명령 실행
이미 실행 중인 container 안에서 명령 실행
-i
keyboard input을 열어둠
keyboard input을 열어둠
-t
터미널 화면/TTY 연결
터미널 화면/TTY 연결
bash -lc
bash가 문자열 명령을 실행
bash가 문자열 명령을 실행
&&
앞 명령이 성공할 때만 다음 명령 실행
앞 명령이 성공할 때만 다음 명령 실행
exec bash
그 위치에서 새 interactive shell로 전환
그 위치에서 새 interactive shell로 전환
Container에서 나오기
exit
4. Host ↔ Container 파일 복사
docker cp는 host shell에서 실행합니다.
Container → Host로 파일/폴더 복사
docker cp <CONTAINER>:/path/inside/container /path/on/host
Host → Container로 파일/폴더 복사
docker cp /path/on/host <CONTAINER>:/path/inside/container
Henry PDF 폴더를 Michael container에서 host로 복사
mkdir -p /opt/hermes-memory-platform/files/gmail/19f762058fdf5aa5
docker cp \
c2082f6be64b:/opt/data/hermes-memory-platform/files/gmail/19f762058fdf5aa5/. \
/opt/hermes-memory-platform/files/gmail/19f762058fdf5aa5/
ls -lh /opt/hermes-memory-platform/files/gmail/19f762058fdf5aa5/
끝의
/.는 “폴더 자체가 아니라 폴더 안의 내용물을 복사”하라는 뜻입니다.
복사 후 checksum 확인
sha256sum /opt/hermes-memory-platform/files/gmail/19f762058fdf5aa5/*.pdf
5. 로그 보기 / 상태 확인
Container 로그 보기
docker logs <CONTAINER_ID_OR_NAME>
최근 100줄만 보기
docker logs --tail 100 <CONTAINER_ID_OR_NAME>
실시간 로그 따라가기
docker logs -f <CONTAINER_ID_OR_NAME>
실시간 + 최근 100줄
docker logs -f --tail 100 <CONTAINER_ID_OR_NAME>
Container 상세 정보
docker inspect <CONTAINER_ID_OR_NAME>
Mount/volume 정보만 보기
docker inspect <CONTAINER_ID_OR_NAME> --format '{{json .Mounts}}' | python3 -m json.tool
6. Docker Compose 자주 쓰는 명령
Compose 명령은 보통 docker-compose.yml이 있는 project directory에서 실행합니다.
프로젝트 폴더로 이동
cd /opt/hermes-memory-platform
서비스 상태 보기
docker compose ps
서비스 시작 / 재생성
docker compose up -d
특정 서비스 로그 보기
docker compose logs --tail 100 hermes-memory-api
특정 서비스 재시작
docker compose restart hermes-memory-api
서비스 중지
docker compose stop
주의:
docker compose down -v는 volume까지 삭제할 수 있어 데이터 손실 위험이 있습니다. PostgreSQL volume에는 절대 함부로 쓰지 마세요.
7. Jeff/Michael 자주 쓰는 경로
Hostinger VPS host 기준
/opt/hermes-memory-platform
/opt/hermes-memory-platform/docker-compose.yml
/opt/hermes-memory-platform/files
Michael / Hermes runtime container 기준
/opt/data
/opt/data/hermes-memory-platform
/opt/data/michael_obsidian_vault
Henry / Sunshare PDF — Michael runtime 내부
/opt/data/hermes-memory-platform/files/gmail/19f762058fdf5aa5/
Henry / Sunshare PDF — host에 복사 후 있어야 할 위치
/opt/hermes-memory-platform/files/gmail/19f762058fdf5aa5/
주의: 같은 이름의 project라도 host와 container의 path가 다를 수 있습니다. 파일이 안 보이면 먼저 어느 shell에 있는지 확인하세요.
8. 안전 원칙
- 먼저
pwd,hostname,docker ps로 현재 위치를 확인합니다. - 삭제 명령
rm -rf,docker volume rm,docker compose down -v는 매우 조심합니다. - PostgreSQL 관련 container/volume은 백업 없이 삭제하지 않습니다.
- 파일 복사는 먼저
ls -lh와sha256sum으로 확인합니다. - 운영 서비스 변경 전에는
docker compose ps와docker compose logs --tail 100 ...를 봅니다.
안전한 기본 진단 세트
hostname
whoami
pwd
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}'
docker compose ps 2>/dev/null || true
Quick Copy Block
가장 자주 쓸 가능성이 높은 명령어만 모았습니다.
# 1. host에서 container 목록 보기
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}'
# 2. Michael runtime container 안으로 들어가기
docker exec -it c2082f6be64b bash
# 3. 특정 폴더로 바로 들어가기
docker exec -it c2082f6be64b bash -lc 'cd /opt/data/hermes-memory-platform/files/gmail/19f762058fdf5aa5 && exec bash'
# 4. container에서 host로 Henry PDF 복사
mkdir -p /opt/hermes-memory-platform/files/gmail/19f762058fdf5aa5
docker cp c2082f6be64b:/opt/data/hermes-memory-platform/files/gmail/19f762058fdf5aa5/. /opt/hermes-memory-platform/files/gmail/19f762058fdf5aa5/
# 5. 복사 확인
ls -lh /opt/hermes-memory-platform/files/gmail/19f762058fdf5aa5/
sha256sum /opt/hermes-memory-platform/files/gmail/19f762058fdf5aa5/*.pdf
# 6. logs 보기
docker logs --tail 100 <CONTAINER_ID_OR_NAME>
# 7. compose 서비스 상태
cd /opt/hermes-memory-platform
docker compose ps