得到它現在的工作!
問題是這一行:
var appDataPath = env.ContentRootPath + @"\App_Data";
在泊塢運行時轉換爲@"/app\App_Data"
。
首先,我使用Windows目錄分隔符'\'
,我不認爲這是在Linux上的工作。另外我不認爲路徑可以包含"/app"
,因爲它與此文件夾相關。當在Windows中運行該泊塢窗的外面我得到了它的工作更好紮根路徑:@"c:\wwwroot\app\App_Data"
總之,通過改變這一點,開始按預期工作:
var appDataPath = @"/App_Data";
更新
了跟進問題。我希望這個路徑既可以在Linux上的Docker上運行,也可以在普通的Windows主機上運行,但我不能僅僅使用/App_Data
作爲路徑,因爲這會在Windows上轉化爲c:\App_Data
。所以我嘗試使用此路徑:./AppData
在Windows中正常工作,導致c:\wwwroot\app\App_Data
。但不幸的是,這在Docker中仍然不起作用。不過爲什麼不明白。 Maybee Docker對路徑匹配非常挑剔,只接受完全匹配,因爲這是我在container-config中映射到的路徑。
無論如何,這是一個真正的頭痛,現在已經用了6個小時。這就是我在Linux和Windows上都可以使用的。不看非常好,但它的工作原理:
Path.Combine(Directory.GetCurrentDirectory().StartsWith("/") ? "/" : ".", "App_Data");
如果您能想出一個更好的看法,請隨時讓我知道。
更新2
好吧,我想我現在就買下。我認爲。在Docker中運行時,每條路徑必須以'/'爲根。相對路徑是不允許的。我的應用程序文件被複制到容器路徑'/ app',並將我的數據映射到'/ data'。當前目錄設置爲'/ app',但訪問數據我顯然必須指向'/ data'而不是'/ app/data'。我錯誤地認爲所有路徑都是相對'/ app'而不是'/'的。之所以會出現這種情況,可能是因爲我在標準Windows主機中運行此應用程序文件夾時有我的數據文件(這在任何情況下都不是一個好主意)。這讓我感到困惑,認爲這同樣適用於我的Docker環境。
現在,我意識到這一點,它更清晰得多。我不得不使用'/ data'而不是'./data'或'/ app /仍然使用'./data'或任何其他相對路徑,這些路徑將相對於ContentRootPath/CurrentDir進行解析。然而,像'/ data'這樣的絕對根路徑將無法工作,因爲它會解析爲'c:\ data'(相對於當前驅動器的根目錄)。
您是如何繪製音量的?這取決於未來的反應。 – German
因爲我使用的是Synology Docker UI,所以我並沒有深入瞭解實際的CLI,但我所做的只是單擊「添加文件夾」,從樹中選擇一個文件夾,然後輸入「/ App_Data」作爲容器內的映射路徑。 –
好了讀一下這個技術,它是kitematic的替代品。我建議你儘快理解它是如何工作的。 – German