도커 파일에서 도커 이미지로 폴더를 복사하는 방법은 무엇입니까?
과 같은 했습니다.COPY * /
그리고 그 결과에 매우 놀랐습니다.순진한 도커 코드는 전역에서 디렉토리를 통과한 다음 각 파일을 대상 디렉토리에 덤프하면서 내 디렉토리 구조를 정중히 무시하는 것 같습니다.
적어도 그것이 제가 이 티켓을 이해하는 방법이고 제가 얻은 결과와 확실히 일치합니다.
이러한 행동이 여전히 존재할 수 있는 유일한 이유는 이것이 이루어져야 할 다른 방법이 있기 때문이라고 생각합니다.하지만 머리가 아주 작은 곰이 어떻게 이해하는지 아는 것은 쉽지 않습니다, 아는 사람이 있나요?
사용하다ADD
(계속)
그ADD
명령은 다음과 같이 받아들일 수 있습니다.<src>
매개변수:
- 빌드 폴더 내의 폴더(도커 파일과 동일한 폴더).그런 다음 Docker 파일에 다음과 같은 행을 추가합니다.
ADD folder /path/inside/your/container
또는
- 호스트 파일 시스템의 모든 위치에 단일 파일 아카이브.보관 파일을 만들려면 다음 명령을 사용합니다.
tar -cvzf newArchive.tar.gz /path/to/your/folder
그런 다음 Docker 파일에 다음과 같은 줄을 추가합니다.
ADD /path/to/archive/newArchive.tar.gz /path/inside/your/container
주의:
ADD
보관 파일을 자동으로 추출합니다.- 후행 슬래시의 유무가 중요합니다. 관련 문서 참조
@Vonc가 말한 것처럼 현재와 같은 명령어를 추가할 가능성은 없습니다.유일한 해결 방법은 폴더를 언급하고 폴더를 만들고 폴더에 내용을 추가하는 것입니다.
# add contents to folder
ADD src $HOME/src
디렉토리에 src라는 폴더를 만들고 여기에 src 폴더의 내용을 추가합니다.
사용하다ADD
에 COPY
호스트에서 디렉토리 dst로 디렉토리 src의 모든 내용을 컨테이너에서 복사한다고 가정합니다.
ADD src dst
참고: 디렉터리 dst가 컨테이너에 자동으로 생성됩니다.
당신은 가지고 있다
COPY files/* /test/
은 는되확장으로 됩니다.COPY files/dir files/file1 files/file2 files/file /test/
.
,COPY
명령):COPY files/dir /test/
나쁘든) 나쁘든) 라는 될 것입니다.COPY
합니다.dir
대상 디렉터리로 이동합니다.아그가 아닙니다.dir
그 자체가 아니라 내용입니다.나는 카피가 최상위 디르를 보존하지 않는다는 사실에 흥분하지 않지만, 지금은 한동안 그런 식이었습니다.
그래서 하위 호환성을 보존한다는 명목으로, 다음과 같은 것은 가능하지 않습니다.COPY
/ADD
디렉토리 구조
유일한 해결 방법은 다음과 같습니다.RUN mkdir -p /x/y/z
구조를 한 후 의 " 대디리구다한음일련의축구를조터렉상일▁to,의"를 작성합니다.docker ADD
(채울 폴더마다 하나씩).
(ADD
,것은 아니다.COPY
코멘트대로)
COPY . <destination>
당신의 경우일 것입니다.
COPY . /
원본 포스터의 경우를 완전히 이해하지는 못하지만 도커 파일에서 복사를 사용하여 디렉터리 구조를 복사하는 것이 가능하다는 것을 증명할 수 있습니다.
다음과 같은 폴더 구조가 있다고 가정합니다.
folder1
file1.html
file2.html
folder2
file3.html
file4.html
subfolder
file5.html
file6.html
대상 이미지에 복사하려면 다음과 같은 Docker 파일 내용을 사용할 수 있습니다.
FROM nginx
COPY ./folder1/ /usr/share/nginx/html/folder1/
COPY ./folder2/ /usr/share/nginx/html/folder2/
RUN ls -laR /usr/share/nginx/html/*
의 출력docker build .
다음과 같이:
$ docker build --no-cache .
Sending build context to Docker daemon 9.728kB
Step 1/4 : FROM nginx
---> 7042885a156a
Step 2/4 : COPY ./folder1/ /usr/share/nginx/html/folder1/
---> 6388fd58798b
Step 3/4 : COPY ./folder2/ /usr/share/nginx/html/folder2/
---> fb6c6eacf41e
Step 4/4 : RUN ls -laR /usr/share/nginx/html/*
---> Running in face3cbc0031
-rw-r--r-- 1 root root 494 Dec 25 09:56 /usr/share/nginx/html/50x.html
-rw-r--r-- 1 root root 612 Dec 25 09:56 /usr/share/nginx/html/index.html
/usr/share/nginx/html/folder1:
total 16
drwxr-xr-x 2 root root 4096 Jan 16 10:43 .
drwxr-xr-x 1 root root 4096 Jan 16 10:43 ..
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file1.html
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file2.html
/usr/share/nginx/html/folder2:
total 20
drwxr-xr-x 3 root root 4096 Jan 16 10:43 .
drwxr-xr-x 1 root root 4096 Jan 16 10:43 ..
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file3.html
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file4.html
drwxr-xr-x 2 root root 4096 Jan 16 10:33 subfolder
/usr/share/nginx/html/folder2/subfolder:
total 16
drwxr-xr-x 2 root root 4096 Jan 16 10:33 .
drwxr-xr-x 3 root root 4096 Jan 16 10:43 ..
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file5.html
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file6.html
Removing intermediate container face3cbc0031
---> 0e0062afab76
Successfully built 0e0062afab76
FROM openjdk:8-jdk-alpine
RUN apk update && apk add wget openssl lsof procps curl
RUN apk update
RUN mkdir -p /apps/agent
RUN mkdir -p /apps/lib
ADD ./app/agent /apps/agent
ADD ./app/lib /apps/lib
ADD ./app/* /apps/app/
RUN ls -lrt /apps/app/
CMD sh /apps/app/launch.sh
Docker 파일 내에서 파일을 복사하는 중입니다../apps/agent
그리고../apps/lib
에 대한 디렉토리./apps/agent
그리고./apps/lib
디렉터리.
*를 /로 바꿉니다.
그래서 대신에
COPY * <destination>
사용하다
COPY / <destination>
도커 파일이 있는 폴더의 내용을 컨테이너에 복사하려고 합니다.ADD 사용:
RUN mkdir /temp
ADD folder /temp/Newfolder
임시/새 폴더로 컨테이너에 추가됩니다.
폴더는 도커 파일이 있는 폴더/디렉토리입니다. 보다 구체적으로는 내용을 저장하고 복사할 위치입니다.
이제 실행 중인 컨테이너로 복사/추가된 폴더를 확인하고 ls를 사용하여 내용을 볼 수 있습니다.
가장 간단한 방법:
sudo docker cp path/on/your/machine adam_ubuntu:/root/path_in_container
~를 사용하여 루트에서 픽업해야 하는 항목을 복사하는 경우 루트 경로에 입력합니다.
언급URL : https://stackoverflow.com/questions/37789984/how-to-copy-folders-to-docker-image-from-dockerfile
'programing' 카테고리의 다른 글
하이픈 뒤에 줄 바꿈 없음 (0) | 2023.08.10 |
---|---|
JQuery를 사용하여 입력 필드에 포커스를 설정하는 방법 (0) | 2023.08.10 |
명령행별 pytest에서 인수를 전달하는 방법 (0) | 2023.08.05 |
UIView의 사용자 지정 테두리 색을 프로그래밍 방식으로 설정하는 방법은 무엇입니까? (0) | 2023.08.05 |
요청이 실패했거나 서비스가 적시에 응답하지 않았습니까? (0) | 2023.08.05 |