Dockerコンテナ内にシンボリックリンクを含むホストディレクトリをマウントします


104

このパラメーターを使用してコンテナーをマウントしました。

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

ホストの/ 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

それはdockerで行うことさえ可能ですか?それを行う方法があるかどうかはわかりません。

シンボリックリンクが指している場所に直接マウントできることはわかっていますが、これが可能かどうか疑問に思っていました。


/mntエンドポイントへのマッピングの問題について聞いたことがありますが、これはホスト固有である可能性があります。最も安全なのは、可能であればそれを回避することです。
ldg 2016

回答:


144

シンボリックリンクは、Docker内の大きな課題です。あなたの場合、両方のディレクトリをマウントできます。

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

シンボリックリンクがコンテナの内部と外部の両方で機能するには、絶対パスであり、まったく同じ名前を使用する必要があります。

一般に、シンボリックリンクはdocker内では機能しません。私はこれが難しい方法だと思いました。


Windowsでシンボリックリンクを作成した場合の対処方法。パスはc:\(ドライブ文字、セミコロン、バックスラッシュ付き)である可能性がありますか?
エイタン2018

1
@Eitan Dockerを使用する場合は、ウィンドウを離れてlinux / unixシステムを採用する
Nam

はい。私は、WindowsがCIFで動作し、NFSがWindows Serverバージョンでのみ動作することを確認しました(なぜ基本はWindowsサーバーでのみ動作するのですか?コストがかかるため、Microsoftはあなたに支払いを求めています)。
エイタン

Laravelストレージシンボリックリンクを機能させるためにこれで一日中苦労しました。以下のためdocker-composeの構成のようになります。volumes: [./:/var/www, ./public/storage:/var/www/public/storage]。ここに、public/storageへのシンボリックリンクがあり./storage/app/publicます。解決してくれてありがとう!
JanIwanow19年

19

1つの解決策は、Dockerに元のファイルをマウントさせることですがreadlink -f、ファイルの実際の場所を出力するを使用します。このようにして、コマンドでシンボリックリンクの場所を参照できます。

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


機能していません-これにより、同じシンボリックリンクが欠落します
Ami Mahloof 2017年

MacOSで:perl -MCwd -le 'print Cwd::abs_path(shift)' "$path"(からstackoverflow.com/questions/7665/...
akauppi

7
Dockerでテストしていませんが、readlinkをいじってみると、これは/ home / test /シンボリックリンクである場合は機能するようですが、/ home / test /シンボリックリンクが含まれている場合は機能しません。
ジャスティンドネリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.