Ich habe den Container mit diesem Parameter gemountet:
-v / home / test /: / home / test
In / home / test auf dem Host befindet sich ein symbolischer Link, der auf einen Ordner / mnt / verweist.
Aber dieser Link scheint im Container unterbrochen zu sein, obwohl er zu sehen ist, wohin er zeigt:
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
Ist das überhaupt im Docker möglich? Ich bin mir nicht sicher, ob es einen Weg gibt, dies zu tun.
Ich weiß, dass ich direkt an der Stelle montieren kann, auf die der symbolische Link zeigt, aber ich habe mich nur gefragt, ob dies möglich ist.
/mnt
Endpunkt zugeordnet sind, der möglicherweise hostspezifisch ist. Am sichersten ist es, dies zu vermeiden, wenn Sie können.Antworten:
Symlinks sind eine große Herausforderung innerhalb von Docker. In Ihrem Fall können Sie beide Verzeichnisse bereitstellen:
Damit symbolische Links sowohl innerhalb als auch außerhalb des Containers funktionieren, müssen sie absolute Pfade sein und genau dieselben Namen verwenden.
Im Allgemeinen funktionieren Symlinks im Docker nicht. Ich fand das auf die harte Tour.
quelle
docker-compose
Konfiguration wäre das so.volumes: [./:/var/www, ./public/storage:/var/www/public/storage]
. Hierpublic/storage
ist ein Symlink zu./storage/app/public
. Danke für die Lösung!Eine Lösung besteht darin, Docker dazu zu bringen, die Originaldatei bereitzustellen, aber
readlink -f
den tatsächlichen Speicherort der Datei zu verwenden. Auf diese Weise können Sie weiterhin auf die Symlink-Position in Ihrem Befehl verweisen, zdocker run -it -v $(readlink -f /home/test/):/home/test/ ...
quelle
perl -MCwd -le 'print Cwd::abs_path(shift)' "$path"
(von stackoverflow.com/questions/7665/… )