近年來,Docker 在開發者圈子里越來越流行,成為了許多團隊的熱門選擇。然而,有時,開發者可能會在創建 Docker 鏡像過程中遇到 Docker 不識別軟鏈接的問題。
有些情況下,我們需要將某個目錄下的文件作為一個整體復制到 Docker 鏡像中。然而,在這個目錄下,可能存在指向其他目錄的軟鏈接,這些軟鏈接并不會被 Docker 默認復制進入鏡像中。
例如,我們有一個文件夾 /app,里面的目錄結構如下:
/app |- file1 |- file2 |- link1 ->/other_folder
當我們執行以下 Dockerfile 指令時,發現文件夾 /app 下的 link1 并沒有被復制到 Docker 鏡像中:
FROM ubuntu:latest COPY ./app /app
這是因為 Docker 在構建鏡像時,并不能識別軟鏈接。默認情況下,只有軟鏈接指向的文件或目錄被復制到了 Docker 鏡像中。
要解決這個問題,我們可以使用 -L 參數將軟鏈接轉化為直接拷貝鏈接指向的文件或目錄,然后將整個目錄復制到 Docker 鏡像中。修改后的 Dockerfile 如下:
FROM ubuntu:latest COPY -L ./app /app
這樣,就可以完整地復制所有文件和軟鏈接到 Docker 鏡像中了。
總之,如果我們需要在 Docker 鏡像中復制一個目錄,其中包含有軟鏈接,那么我們需要在 COPY 命令中加入 -L 參數,該參數會將軟鏈接轉化為直接拷貝鏈接指向的文件或目錄,并將整個目錄復制進鏡像中。
下一篇docker80磁盤