Docker는 컨텍스트 외부에서 심볼릭 링크를 따릅니다.


88

또 다른 Docker 심볼릭 링크 질문입니다. 모든 Docker 빌드에 복사하려는 파일이 많이 있습니다. 내 디렉토리 구조는 다음과 같습니다.

parent_dir
    - common_files
        - file.txt
    - dir1
        - Dockerfile  
        - symlink -> ../common_files

위의 예에서 dir1 내부에 docker 빌드 할 때 file.txt를 복사하고 싶습니다. 하지만 file.txt의 여러 복사본을 유지하고 싶지 않습니다. 당 고정 표시기 버전 0.10로이 링크 , 고정 표시기 구축해야

ADD 빌드 지침은 컨테이너 루트 내부의 심볼릭 링크를 따르십시오.

하지만 Dockerfile에서 다음 줄 중 하나를 사용하여 빌드 할 때 이러한 파일이나 디렉터리없습니다 .

ADD symlink /path/dirname 또는 ADD symlink/file.txt /path/file.txt

마운트 옵션으로 해결되지 않습니다 (크로스 플랫폼 ...). 나는 tar -czh . | docker build -t성공하지 못했다.

Docker가 심볼릭 링크를 따르고 common_files / file.txt를 빌드 된 컨테이너에 복사하도록하는 방법이 있습니까?

답변:


68

그것은 불가능하며 구현되지 않을 것입니다. github issue # 1676에 대한 토론을 살펴보십시오 .

반복 할 수 없기 때문에 허용하지 않습니다. 컴퓨터의 심볼릭 링크는 내 컴퓨터와 동일하지 않으며 동일한 Dockerfile은 두 가지 다른 결과를 생성합니다. 또한 / etc / paasswd에 대한 심볼릭 링크가 있으면 로컬 파일이 아닌 호스트 파일을 링크하기 때문에 문제가 발생합니다.


감사합니다. 예, 이전에 해당 링크를 발견했지만 훨씬 이전 버전의 docker (0.6.1) 용이라고 생각했습니다. 0.10의 변경 로그 일종의 언급이 가능합니다. github.com/docker/docker/blob/master/…
Ravi

또한 "parent_dir"이 컴퓨터에서 체크 아웃되고 심볼릭 링크에 "common_files"에 대한 상대 경로가 있으면 반복 가능합니다.
Ravi

2
귀하의 인용문 Follow symlinks inside container's root for ADD build instructions.컨테이너 내부의 심볼릭 링크가 따르는 것을 의미합니다 . 빌드 컨텍스트 디렉토리에 없습니다. 에서 ADD file.txt /dir/file.txt디렉토리 dir심볼릭 링크가 될 수 있습니다. 내 대답에서 인용 한 주장은 여전히 ​​유효하며 최신 버전에서는 여전히 심볼릭 링크를 따르지 않습니다. git 과 같은 개정 제어 시스템에 심볼릭 링크를 저장할 때 (반복성과 관련하여) 문제가 발생할 수 있습니다 . 따라서이 질문을 참조하십시오 .
0x7d7b

1
git의 심볼릭 링크에 대한 귀하의 요점을 봅니다. 그러나 심볼릭 링크는 git로 갈 필요가 없습니다. 간단한 설정 스크립트는 심볼릭 링크를 만드는 로컬 환경을 준비 할 수 있습니다. 나에게 공유 파일의 'n'복사본을 유지하는 데 드는 비용은 유지 관리 측면에서 너무 높은 것으로 보입니다. 아마도 아파치에서 그것을 제공해야 할 것입니다. 감사합니다.
Ravi

18
부끄러운 일이지만 논리를 따르지 않고 나를 깨 물게하는 요점을 보는 동안. Git은 심볼릭 링크를 완벽하게 처리하며 소스 저장소가 체크 아웃 된 모든 시스템과 환경에서 빌드가 작동 할 것으로 기대합니다 ..?!
Gregor

9

한 가지 가능성은 다음을 사용하여 상위 디렉토리에서 빌드를 실행하는 것입니다.

$ docker build [tags...] -f dir1/Dockerfile .

(또는 동등하게 하위 디렉토리에서)

$ docker build  [tags...] -f Dockerfile ..

Dockerfile은 적절한 경로로 복사 / 추가를 수행하도록 구성되어야합니다. 설정에 따라 .dockerignore부모가 컨텍스트에 포함하고 싶지 않은 것을 제외하도록 할 수 있습니다.



2

simlink를 사용하는 대신 simlink를 복사하거나 만드는 대신 sites_available에서 sites_enabled로 파일을 이동하여 관리적으로 문제를 해결할 수 있습니다.

따라서 사이트 구성은 중지 된 경우 site_available 폴더에만, 또는 사용해야하는 경우 sites_enabled에있는 사본 하나에 만 있습니다.


1

도커 빌드의 이식성이 손상된다는 것을 알고 있지만 기호 대신 하드 링크를 사용할 수 있습니다.

ln /some/file ./hardlink

3
명확하게 말하면 이것은 디렉토리가 아닌 파일에 대해 작동합니다.
GDorn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.