강의 내용중에 우분투 버전을 18.04로 맞추기 위해 도커 환경에서 진행하는 것을 권장하여 이번에 처음으로 도커를 써보려고 했습니다.
도커파일 내용은 강의 도커파일 대로 했더니 ruby버전이 또 맞지 않아서 강의 도커파일에 ruby버전을 업그레이드하는 코드만 삽입 하였습니다.
도커파일은 다음과 같습니다.
FROM ubuntu:18.04
ENV PATH="${PATH}:/usr/local/lib/python3.6/dist-packages/bin"
ENV LC_CTYPE=C.UTF-8
RUN apt update
RUN apt install -y \
gcc \
git \
python3 \
python3-pip \
ruby \
sudo \
tmux \
vim \
wget
# install pwndbg
WORKDIR /root
RUN git clone https://github.com/pwndbg/pwndbg
WORKDIR /root/pwndbg
RUN git checkout 2023.03.19
RUN ./setup.sh
# install pwntools
RUN pip3 install --upgrade pip
RUN pip3 install pwntools
# 기존에 사용 중인 Ruby 버전을 3.1로 업그레이드
FROM ruby:3.1
# 필요한 패키지 설치
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
# 작업 디렉토리 설정
WORKDIR /myapp
# 필요한 gem 설치
RUN gem install one_gadget
# install one_gadget command
RUN gem install one_gadget
WORKDIR /root
이후 강의에 있던 명령어 그대로 실행하였습니다.
명령어는 아래와 같습니다.
$ IMAGE_NAME=ubuntu1804 CONTAINER_NAME=running1804; docker build . -t $IMAGE_NAME; docker run -d -t --privileged --name=$CONTAINER_NAME $IMAGE_NAME; docker exec -it -u root $CONTAINER_NAME bash
이후 실행하면 빌드가 성공되고 bash에 들어가는데 문제는 여기서 제가 실습하고자하는 파일이 호스트 환경과 아예 다른 새 PC 저장소 마냥 도커 내에 아무 파일도 존재하지 않습니다... 도커에서 실습하기 위해 원하는 파일을 가져다놓는 방법이나 로컬과 같은 저장환경으로 도커를 실행하는 방법은 없을까요?
도커 환경에서 호스트 파일 사용 방법
🛠️ 문제 개요
도커 컨테이너 내부에서 실습하려고 했지만, 컨테이너 내부에 호스트 파일이 존재하지 않음. 도커는 기본적으로 호스트 파일 시스템과 분리된 환경을 제공하기 때문에 컨테이너 내부에서 기존 호스트 파일을 사용하려면 볼륨 마운트 또는 바인드 마운트를 설정해야 해요
📌 해결 방법
1️⃣ 볼륨 마운트 방법 (-v
옵션 사용)
도커 실행 시 -v
옵션을 추가하면 호스트 디렉토리를 컨테이너 내부로 마운트할 수 있어ㅛ요
✅ 명령어 예시
$ docker run -d -t --privileged --name=running1804 \
-v /호스트/경로:/컨테이너/경로 ubuntu1804
✅ 예제 적용
예를 들어, 호스트의 ~/my_files
를 컨테이너의 /root/my_files
에 마운트하려면 다음과 같이 실행하면 됨:
$ docker run -d -t --privileged --name=running1804 \
-v ~/my_files:/root/my_files ubuntu1804
이제 컨테이너 내부에서 /root/my_files
디렉토리를 보면 호스트의 ~/my_files
내용이 보이게 댐
2️⃣ 현재 실행 중인 컨테이너에 볼륨 마운트 추가 (docker cp
활용)
이미 실행 중인 컨테이너에는 docker cp
명령을 사용하여 호스트 파일을 복사할 수 있슴다.
✅ 파일 복사 예제
$ docker cp /호스트/파일경로 running1804:/컨테이너/파일경로
예를 들어, 호스트의 exploit.py
를 컨테이너의 /root/exploit.py
로 복사하려면 다음과 같이 실행하면 대요
$ docker cp ~/exploit.py running1804:/root/exploit.py
이제 컨테이너 내부에서 /root/exploit.py
파일을 사용할 수 있습니당
3️⃣ 도커 컨테이너를 호스트와 동일한 환경처럼 실행 (--mount
옵션 사용)
--mount
옵션을 사용하여 호스트의 특정 디렉토리를 컨테이너와 동기화할 수도 있어요.
✅ 명령어 예시
$ docker run -d -t --privileged --name=running1804 \
--mount type=bind,source=/호스트/경로,target=/컨테이너/경로 ubuntu1804
✅ 예제 적용
예를 들어, 호스트의 ~/workspace
를 컨테이너의 /root/workspace
에 마운트하려면:
$ docker run -d -t --privileged --name=running1804 \
--mount type=bind,source=~/workspace,target=/root/workspace ubuntu1804
이제 컨테이너 내부에서 /root/workspace
디렉토리를 보면 호스트의 ~/workspace
내용이 보이게 돼요.
🔥 결론
도커 컨테이너 내부에서 호스트 파일을 사용하려면 다음 방법을 사용할 수 있어요:
- 컨테이너 실행 시
-v
옵션 사용 (권장 방법) - 이미 실행 중인 컨테이너에
docker cp
로 파일 복사 --mount
옵션을 사용하여 호스트 디렉토리를 컨테이너와 동기화