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

또 다른 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를 빌드 된 컨테이너에 복사하도록하는 방법이 있습니까?



답변

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

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


답변

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

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

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

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

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


답변

누군가가 여전히이 문제를 가지고 있다면 superuser.com에서 아주 좋은 해결책을 찾았습니다.

/superuser/842642/how-to-make-a-symlinked-folder-appear-as-a-normal-folder

기본적으로 tar를 사용하여 심볼릭 링크를 역 참조하고 결과를 도커 빌드에 제공하는 것이 좋습니다.

$ tar -czh . | docker build -


답변

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

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


답변

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

ln /some/file ./hardlink


답변