Я смонтировал контейнер с таким параметром:
-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
конечной точке, которая может зависеть от хоста - безопаснее всего было бы избежать этого, если это возможно.Ответы:
Симлинки - большая проблема внутри Docker. В вашем случае вы можете смонтировать оба каталога:
Чтобы символические ссылки работали как внутри, так и вне контейнера, они должны быть абсолютными путями и использовать точно такие же имена.
В общем случае символические ссылки не работают внутри докера. Я нашел это на собственном горьком опыте.
источник
docker-compose
настройке было бы так.volumes: [./:/var/www, ./public/storage:/var/www/public/storage]
. Вотpublic/storage
символическая ссылка на./storage/app/public
. Спасибо за решение!Одно из решений - заставить Docker смонтировать исходный файл, но использовать,
readlink -f
который печатает фактическое местоположение файла. Таким образом, вы все равно можете ссылаться на расположение символической ссылки в своей команде, напримерdocker run -it -v $(readlink -f /home/test/):/home/test/ ...
источник
perl -MCwd -le 'print Cwd::abs_path(shift)' "$path"
(из stackoverflow.com/questions/7665/… )