Zamontowałem kontener z tym parametrem:
-v / home / test /: / home / test
Wewnątrz / home / test na hoście znajduje się dowiązanie symboliczne wskazujące na folder / mnt /.
Ale ten link, chociaż można zobaczyć, gdzie wskazuje, wydaje się uszkodzony w kontenerze:
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
Czy w ogóle można to zrobić w dockerze? Nie jestem pewien, czy jest na to sposób.
Wiem, że mogę bezpośrednio zamontować tam, gdzie wskazuje dowiązanie symboliczne, ale zastanawiałem się tylko, czy to jest możliwe.
/mnt
punktu końcowego, który może być specyficzny dla hosta - najbezpieczniej byłoby tego uniknąć, jeśli możesz.Odpowiedzi:
Linki symboliczne to duże wyzwanie w dockerze. W twoim przypadku możesz zamontować oba katalogi:
Aby dowiązania symboliczne działały zarówno w kontenerze, jak i poza nim, muszą być ścieżkami bezwzględnymi i używać dokładnie tych samych nazw.
Ogólnie rzecz biorąc, łącza symboliczne nie działają w oknie dokowanym. Znalazłem to na własnej skórze.
źródło
docker-compose
konfiguracji byłoby tak.volumes: [./:/var/www, ./public/storage:/var/www/public/storage]
. Tutajpublic/storage
jest link symboliczny do./storage/app/public
. Dziękuję za rozwiązanie!Jednym z rozwiązań jest zainstalowanie oryginalnego pliku przez platformę Docker, ale użycie polecenia,
readlink -f
które drukuje rzeczywistą lokalizację pliku. W ten sposób nadal możesz odwoływać się do lokalizacji dowiązania symbolicznego w poleceniu, npdocker run -it -v $(readlink -f /home/test/):/home/test/ ...
źródło
perl -MCwd -le 'print Cwd::abs_path(shift)' "$path"
(ze stackoverflow.com/questions/7665/… )