Docker kapsayıcısında sembolik bir bağlantıyla ana dizinini bağlayın


107

Konteyneri bu parametre ile monte ettim:

-v / home / test /: / home / test

Ana bilgisayardaki / home / test içinde, / mnt / klasörüne işaret eden sembolik bir bağlantı vardır.

Ancak bu bağlantı, nereye işaret ettiği görülebilmesine rağmen, kabın içinde bozuk görünüyor:

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

Docker'da yapılması mümkün mü? Bunu yapmanın bir yolu olup olmadığından emin değilim.

Sembolik bağlantının işaret ettiği yere doğrudan monte edebileceğimi biliyorum, ancak bunun mümkün olup olmadığını merak ediyordum.


/mntAna bilgisayara özgü olabilecek bir uç noktaya eşleme sorunları duydum - yapabiliyorsanız en güvenli şey bundan kaçınmaktır.
ldg

Yanıtlar:


147

Symlinks, docker içinde büyük bir zorluktur. Sizin durumunuzda her iki dizini de bağlayabilirsiniz:

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

Sembolik bağların kabın hem içinde hem de dışında çalışması için, mutlak yollar olmaları ve tam olarak aynı adları kullanmaları gerekir.

Genelde, sembolik bağlantılar docker içinde çalışmaz. Bunu zor yoldan buldum.


Pencerelerde sembolik bir bağlantım varsa ne yapmalıyım? Yol c: \ olabilir (bir sürücü harfi, noktalı virgül ve ters eğik çizgi ile)?
Eitan

1
@Eitan Docker ile çalışmak istediğinizde pencerelerden çıkın ve linux / unix sistemlerini benimseyin
Nam G VU

Evet. Windows'un CIF ile çalıştığını ve NFS'nin yalnızca Windows Server sürümlerinde olduğunu söyledim (Bu temel neden yalnızca Windows sunucularında - yalnızca maliyeti olduğu ve Microsoft sizden ödeme yapmanızı istediği için).
Eitan

Laravel depolama sembolik bağlantısını çalıştırmaya çalışırken bütün bir gün uğraştım. İçin docker-composeyapılandırma bu gibi olurdu. volumes: [./:/var/www, ./public/storage:/var/www/public/storage]. Burada public/storagebir sembolik bağlantı var ./storage/app/public. Çözüm için teşekkürler!
Jan Iwanow

20

Çözümlerden biri, Docker'ın orijinal dosyayı bağlamasını sağlamak, ancak readlink -fdosyanın gerçek konumunu yazdıran kullanmaktır . Bu şekilde, komutunuzdaki sembolik bağlantı konumuna yine de başvurabilirsiniz, örn.

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


Çalışmıyor - bu aynı eksik sembolik
bağlarla sonuçlanır

perl -MCwd -le 'print Cwd::abs_path(shift)' "$path"
MacOS'ta

7
Ben Docker içinde test etmedim ama readlink uğraşırken gelen, korumak bu / home / testin çalışacağını görünür / olan bir sembolik, ama eğer / evde olmadığını / test / içeren bir sembolik.
Justin Donnelly
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.