Docker 컨테이너 내부에 심볼릭 링크가있는 호스트 디렉터리 마운트


110

이 매개 변수를 사용하여 컨테이너를 마운트했습니다.

-v / 홈 / 테스트 / : / 홈 / 테스트

호스트의 / home / test 안에는 / mnt / 폴더를 가리키는 심볼릭 링크가 있습니다.

그러나 해당 링크는가 가리키는 곳에서 볼 수 있지만 컨테이너 내부에서 깨진 것처럼 보입니다.

root@f93f72b45013:/var/www/html# cd /home/test/ 
root@f93f72b45013:/home/test# ls -lrt 
total 11956 
lrwxrwxrwx. 1 root root 40 Jul 20 15:55 file -> /mnt/mountedfile/
root@f93f72b45013:/home/test# ls -lrt file/*
ls: cannot access file/*: No such file or directory

도커에서도 가능합니까? 나는 그것을 할 방법이 있는지 확실하지 않습니다.

심볼릭 링크가 가리키는 곳에 직접 마운트 할 수 있다는 것을 알고 있지만 이것이 가능한지 궁금합니다.


/mnt호스트에 따라 다를 수 있는 엔드 포인트에 매핑하는 문제에 대해 들었습니다 . 가장 안전한 방법은 가능하면 피하는 것입니다.
ldg jul.

답변:


152

Symlink는 docker 내부에서 큰 도전입니다. 귀하의 경우 두 디렉토리를 모두 마운트 할 수 있습니다.

-v /home/test/:/home/test -v /mnt/mountedfile:/mnt/mountedfile

심볼릭 링크가 컨테이너 내부와 외부에서 모두 작동하려면 절대 경로 여야하고 정확히 동일한 이름을 사용해야합니다.

일반적으로 심볼릭 링크는 도커 내에서 작동하지 않습니다. 나는 이것이 어려운 길을 발견했다.


Windows에 심볼릭 링크가있는 경우 어떻게해야합니까? 경로는 c : \ (드라이브 문자, 세미콜론 및 백 슬래시 포함) 일 수 있습니까?
Eitan

2
당신이 고정 표시기와 함께 작동 싶어 @Eitan 휴가 윈도우와 포옹 리눅스 / 유닉스 시스템
남 G VU

예. 나는 Windows가 CIF와 함께 작동하고 NFS는 Windows Server 버전에서만 작동한다고 발표했습니다.
Eitan

Laravel 스토리지 심볼릭 링크가 작동하도록 하루 종일 고생했습니다. 들어 docker-compose구성과 같이 될 것이다. volumes: [./:/var/www, ./public/storage:/var/www/public/storage]. 여기에 public/storage심볼릭 링크가 ./storage/app/public있습니다. 해결책에 감사드립니다!
Jan Iwanow

20

한 가지 해결책은 Docker가 원본 파일을 마운트하도록 readlink -f하는 것이지만 파일의 실제 위치를 인쇄하는 것을 사용 합니다. 이렇게하면 명령에서 심볼릭 링크 위치를 계속 참조 할 수 있습니다.

docker run -it -v $(readlink -f /home/test/):/home/test/ ...


작동하지 않음-동일한 누락 된 심볼릭 링크
Ami Mahloof

macOS : perl -MCwd -le 'print Cwd::abs_path(shift)' "$path"(from stackoverflow.com/questions/7665/… )
akauppi

7
Docker에서 테스트하지는 않았지만 readlink로 놀아 보면 / home / test / 심볼릭 링크 인 것처럼 보이지만 / home / test / 에 심볼릭 링크 가 포함되어 있으면 작동하지 않습니다 .
Justin Donnelly
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.