2017-09-09 14 views
0

Docker를 사용 중이며 Docker는 이미지에 심볼릭 링크 된 파일 COPY을 연결할 수 없습니다. 그러나 심볼릭 링크 된 파일은 '빌드 컨텍스트'에 없습니다. 그래서 저는 그것을 cp로 빌드 컨텍스트에 복사하려고 했었습니다. 그러나 그것은 정말로 느립니다. 심볼릭 링크를 사용하지 않고 복사 할 필요없이 디스크의 두 위치에서 파일을 공유 할 수있는 방법이 있습니까?`cp` 대`rsync` 대 뭔가 더 빠름

+5

동일한 물리적 파티션에있는 경우 하드 링크를 사용하십시오. –

+0

Pls 최대 이득에 대한 답변 추가 –

답변

1

이 허용되지 않고 그것이 반복이 아니다이 때문에 우리는 허용하지 않습니다

https://github.com/moby/moby/issues/1676

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

는하지만 내가 공유 이미지 모두를 둘 것입니다 가장 우아한 해결책을 여전히 다시 고정 표시기에게 멀티 빌드 옵션

FROM mysharedimage as shared 

FROM alpine 
COPY --from=shared /my/common/stuff /common 
.... 

를 사용하지 모든 컨테이너에 필요한 공통 파일이있는 경우, 왜냐하면 당신이 도커를 빌드 할 때 현재 컨텍스트가 압축되어 docker 데몬으로 보내지기 때문에 소프트 링크가 작동하지 않기 때문입니다.

하드 링크를 만들 수 있지만 하드 링크는 inode를 가리키며 그들이 가리키는 파일을 표시하지 않습니다. 다른 곳의 소프트 링크는 그들이 가리키는 곳을 알려주지 만 빌드는 그 곳을 보내지 않습니다.

ln /source/file /dest/file 

그래서 당신이 원하는대로하고 싶은대로 전화하십시오.

+0

하드 링크는 링크 된 파일을 절대적으로 보여줍니다. 정의에 따라 파일에 대한 링크입니다. '/ path/to/foo'와'/ path/to/bar'가 같은 파일에 대한 링크 인 경우, 두 파일은 같은 파일에 링크됩니다. 둘 다 가리키는 파일을 알고 싶으면 확인하십시오. 말 그대로 링크 중 하나를 "실제"파일로 생각할 이유가 없습니다. 그들은 둘 다 같은 것을 참조합니다. –

+0

@WilliamPursell, 내가 한 말은'ls -alh'는 파일이 다른 파일을 가리키고 있다는 것을 보여주지 않는다는 것입니다. 즉,'inode'를 확인하고 다른 파일이 해당 inode를 참조하는지 확인해야합니다. 그 이해에 뭔가 빠졌나요? –

+0

'ls -l'은 각 파일의 링크 수를 보여줍니다. 출력의 두 번째 열 (일반적으로)입니다. 나는 대부분 "다른 파일"과 같은 사용법 문구를 예외로하고 있습니다. 'ln a b '를 사용하여 현재 디렉토리에'b' 링크를 만들면'a'와'b'는 모두 같은 파일을 참조합니다. 'a'가 파일이고'b'가 파일에 대한 참조라고 생각하는 것은 잘못된 것입니다. 'a'와'b'는 같은 파일의 다른 이름입니다. 이름 이외에는 차이가 없습니다. 즉, 'b'는 "다른 파일"을 가리키고 있지 않으며 "a"이상입니다. 각각은 파일에 대한 링크입니다. –