도커를 사용하지만 제외는 복사


답변:


377

파일 만들기 .dockerignore거기에 하나 개의 라인 (node_modules에 부모이 경우에, 그래서 대부분의 디렉토리) 당신의 고정 표시기 빌드 컨텍스트 디렉토리를 :

**/node_modules

아마 당신은 아마 원하지만 :

node_modules

dockerignore에 대한 정보 : https://docs.docker.com/engine/reference/builder/#dockerignore-file


5
감사합니다 "COPY." 명령이 변화를 필요로하지 않는 것 같아요
알렉산더 밀스

별로 : /config/nginx/ /config/logstash/, 난 컨테이너 bash는이 찾기 :ls config/ gunicorn logs logstash nginx
SalahAdDin

3
@SalahAdDin 당신이 쓰지 않은 것과 같은 이유로, 당신은 ls /config/선행없이 .dockerignore에 그 경로를 추가하려고 했 /습니까?
Pablo

8
그냥 node_modules하위 디렉토리에서 작동하지 않습니다.
rustyx

5
복사를 원하지만 해당 계층에 포함시키지 않으려는 경우 문제가 실제로 해결되지 않습니다.
Wes

33

.dockerignore 파일을 사용할 수없는 사람 (예 : 한 사본에 파일이 필요하지만 다른 사본에는 필요하지 않은 경우) :

예, 그러나 여러 개의 COPY 지침이 필요합니다. 특히, 제외하려는 파일 이름의 각 문자마다 사본이 필요합니다.

COPY [^n]*    # All files that don't start with 'n'
COPY n[^o]*   # All files that start with 'n', but not 'no'
COPY no[^d]*  # All files that start with 'no', but not 'nod'

전체 파일 이름을 갖거나 접두사 만 있으면 다른 파일이 없을 것입니다.


1
COPY failed: no source files were specified'no'로 시작하지만 'nod'가 아닌 파일이 없을 때 a를 얻으므로 wort 하지 않습니다.
mheck

1
또한, 당신이 그렇게 예를 들어, 나의의 nginx 설정에서 (다른 복사 대상에 대해) 두 개의 서로 다른 하위 디렉토리를 사용할 수 있습니다, 내가 가진 것 src/로 이동합니다 /var/www/conf/nginx.conf에 이동 /etc/nginx/conf.d/default.conf. 또한 모든 것을 복사하고 RUN rm -r conf나중에 소스 트리를 그대로 유지하십시오. 누군가 다른 제안이 있으면 듣고 싶습니다.
유발

1
이렇게하면 특정 파일 형식 또는 파일 끝에 대한 해결책은 무엇입니까?
레아 레이 만

이 방법의 유일한 단점은 폴더 구조가 평평하다는 것입니다.
이슬람 Q.

복사 할 디렉토리가 적은 경우 (예 : '/ app'또는 '/ src'만) 더 간단한 방법은 (구조를 유지하기 위해) 디렉토리를 개별적으로 복사 한 다음 COPY [^node_modules]*최상위 파일을 모두 복사하는 디렉토리 만 있으면됩니다 .
smdufb

9

필자의 경우 Dockerfile에는 설치 단계가 포함되어 vendor디렉토리 를 생성했습니다 (PHP에 해당 node_modules). 그런 다음 COPY이 디렉토리를 최종 응용 프로그램 이미지로 가져갑니다. 그러므로 나는 vendor내 안에 넣을 수 없었다 .dockerignore. 내 솔루션은 단순히 수행하기 전에 디렉토리를 삭제하는 것이 었습니다 composer install(PHP와 동등한 npm install).

FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf vendor \
    && composer install 

FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .

이 솔루션은 작동하고 최종 이미지를 부 풀리지 않지만 vendor, 빌드 프로세스 중에 호스트 의 디렉토리가 Docker 컨텍스트에 복사되므로 시간이 더 걸리기 때문에 이상적이지 않습니다 .


3
composer.lock전에 제거해야하는지 확인하십시오 composer install. 잠금 파일이 없으면 다음에 빌드 할 때 다른 종속성 세트 (공급 업체 폴더)가 설치 될 수 있습니다.
Lacek

1
@Lacek : 네 말이 맞아. 이것을 게시 한 후 더 잘 배웠습니다.
Cameron Hudson

1
@CameronHudson은 사람들이이 나쁜 연습을 복사 / 붙여 넣기 전에 원래의 답변을 업데이트 할 수 있습니다.
로빈 반 바렌

2

.dockerignore를 추가하면 효과가 있습니다. 한 가지 추가 사항 Windows에서이 솔루션을 시도하는 사람들은 Windows 에서 .dockerignore 파일을 만들 수 없습니다 (기본적으로 .dockerignore 파일 은으로 시작하는 파일을 만들 수 없으므로).

로 시작하는 파일을 만들려면 Windows의 경우 : .dockerignore.와 같이 끝점을 포함하고 Enter 키를 누릅니다 (폴더 옵션에서보기 확장 옵션을 활성화 한 경우)


6
점으로 시작하여 점으로 시작하는 파일을 창에서 만들 수 있습니다.
Jim Pedid

0

현재 디렉토리에서 node_modules 제외

node_modules

직계 서브 디렉토리에서 node_modules 제외

*/node_modules

공식 문서 는 다음과 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.