RUN cp 는 정상 동작하고, COPY 는 비정상 동작?
# 정상 동작
RUN gradle build
RUN cp 경로1 경로2
# 비정상 동작
RUN gradle build
COPY 경로1 경로2
RUN
컨테이너 내부에서 쉘 명령어 실행
RUN gradle build
- 컨테이너 내부에서 gradle build 명령어 실행
RUN cp 경로1 경로2
- 컨테이너 내부에서 cp 명령 실행해 파일 복사
- 경로1 & 경로2 : 컨테이너 내부 경로
COPY
호스트 머신의 파일이나 디렉토리를 이미지 내부의 지정된 경로로 복사
COPY 경로1 경로2
- 경로1 : 도커 빌드 컨텍스트(호스트 머신)에서의 경로
- 경로2 : 이미지 내부에서의 경로
호스트 머신
- 도커 이용 시 웹 서버가 컨테이너에 설치되는데, 이때 컨테이너가 설치된 운영체제를 도커 호스트라 함
- 하나의 도커 호스트에는 여러 개의 컨테이너가 만들어질 수 있고 독립적으로 실행되기에, 개별의 포트와 파일 시스템을 가짐
에러 발생 이유
COPY 경로1 경로2 | RUN cp 경로1 경로2 |
경로 문제 | |
경로1 : 호스트 머신의 경로여야 하는데, 이 경로가 미존재하거나 잘못 지정되어 있는 경우 |
* 컨테이너 내부의 경로 사용 * 컨테이너 내부에서 파일이 존재하고 접근 가능한 경우, 정상 작동함 |
사용 목적의 차이 | |
호스트에서 컨테이너로 파일을 복사하는 것이 목적 | 컨테이너 내부에서 파일 이동 및 복사에 사용 |
해결 방법
COPY 명령어 사용하려면
- 경로1 이 호스트 머신의 경로임을 확인 및 도커 빌드 컨텍스트에 존재하는지 확인
RUN cp 명령어와 동일한 경로 사용하려면
- 파일이 이미 컨테이너 내부에 있어야 함
- 그러므로 COPY 명령어 사용 전, 필요한 파일을 호스트에서 컨테이너로 복사해야 함
# 호스트 머신의 파일을 컨테이너로 복사
COPY 경로1 /app/경로1
# 복사한 파일을 컨테이너 내부에서 다른 경로로 이동
RUN cp /app/경로1 경로2
명령어 분류
컨테이너 내부에서 실행되는 명령어
- RUN
- CMD
- ENTRYPOINT
- SHELL
호스트 머신과의 작업을 위한 명령어
- COPY
- ADD
기타 명령어
- FROM
- WORKDIR
- ENV
- EXPOSE
- VOLUME
- USER
- ARG
- LABEL
'DevOps' 카테고리의 다른 글
리버스 프록시, 로드 밸런서 (1) | 2025.03.20 |
---|---|
도커(Docker), 쿠버네티스(K8S), CI/CD (0) | 2025.03.01 |
[Docker] 명령어 풀이 (0) | 2024.07.30 |
댓글