iT邦幫忙

0

(已解決)[docker,Mount ] 請教docker如何mount我的D槽資料夾

舜~ 2020-06-07 00:14:143375 瀏覽

解法直接拉到文章下方


各位前輩們好,想請教一下,我用docker linux containers新增了mssql
docker run -it -e ACCEPT_EULA=Y -e SA_PASSWORD=passwd -p 1433:1433 -d mcr.microsoft.com/mssql/server

看了一下預設資料庫放置在/var/opt/mssql/data
我希望可以掛載到我本機的D:\DockerStorage\mssql_2017路徑

我知道docker run有-v參數可用,可以直接掛載實體路徑,但一直沒成功,網路範例幾乎是linux的路徑沒有windows路徑,想請問一下要如何掛載?

host作業系統:win10 64bit
docker版本:2.3.0.3 stable,有勾選WSL2(不曉得有無影響)

指令加上下面兩個目前失敗中
-v d:/DockerStorage/mssql_2017:/var/opt/mssql/data
-v d:/DockerStorage/mssql_2017:/var/opt/mssql/data ubuntu /bin/bash

參考
https://ithelp.ithome.com.tw/articles/10192397
https://dotblogs.com.tw/swater111/2017/01/05/142652
https://token2shell.com/howto/docker/sharing-windows-folders-with-containers/


2020/06/10
目前猜測是安裝mssql後,在/var/opt/mssql/data中會有預設的系統資料庫,而無法掛載,所以調整一下,先掛載到其他地方,進shell後直接調整環境變數。
MSSQL_BACKUP_DIR 設定預設備份目錄位置。
MSSQL_DATA_DIR 變更新 SQL Server 資料庫資料檔 (.mdf) 的建立目錄。
MSSQL_LOG_DIR 變更新 SQL Server 資料庫記錄檔 (.ldf) 的建立目錄。
MSSQL_ERROR_LOG_FILE 設定錯誤記錄檔的位置。

所以預期調整如下
1.建立Container,掛載用-v //d/DockerStorage/mssql_2019:/mnt
2.修改mssql資料庫的預設資料夾

docker run -it
 -e ACCEPT_EULA=Y
 -e SA_PASSWORD=密碼
 -p 1433:1433
 -v //d/DockerStorage/mssql_2019:/mnt
 --name mssql_2019
 -d mcr.microsoft.com/mssql/server

總算可以建立了,然後我測試一下,我在我的d:/DockerStorage/mssql_2019中心增空白檔案,但在我的mnt中沒有出現...
恩...

接著測試在mnt中心增檔案,看我的d:/DockerStorage/mssql_2019有沒有出現,結果沒有權限...
恩...

想問問看有人知道是怎麼回事嗎? 以及預設root密碼多少?


2020/06/12
找到解法了,不會掛掉

docker run -it
 --name mssql_2019_2
 -v //d/DockerStorage/mssql_2019:/var/opt/mssql/data2v
 -p 1433:1433
 -e ACCEPT_EULA=Y
 -e SA_PASSWORD=[密碼]
 -e MSSQL_BACKUP_DIR=/var/opt/mssql/data2
 -e MSSQL_DATA_DIR=/var/opt/mssql/data2
 -e MSSQL_LOG_DIR=/var/opt/mssql/data2
 -e MSSQL_ERROR_LOG_FILE=/var/opt/mssql/data2
 -d mcr.microsoft.com/mssql/server

說明:
用-v參數所指定的資料夾若不存在會自動產生,透過此繞過沒有權限問題
接著再把MSSQL_BACKUP_DIR、MSSQL_DATA_DIR、MSSQL_LOG_DIR、MSSQL_ERROR_LOG_FILE 這四個參數指向新的資料夾即可

...補充,沒成功,因為打錯字
若沒打錯字就會因為當下沒該資料夾而出錯,有打錯字就會在新增資料庫時因找不到位置出錯....

目前看起來好像是需要透過 mcr.microsoft.com/mssql-tools 套件來處理...
不然也沒有vi指令,mkdir指令沒權限,root密碼不知道...


20200613

本來想說就不設定 MSSQL_BACKUP_DIR、MSSQL_DATA_DIR、MSSQL_LOG_DIR、MSSQL_ERROR_LOG_FILE,在新增資料庫時路徑選擇到/var/opt/mssql/data2即可,不過失敗...

docker run -it
 --name mssql_2019_2
 -v //d/DockerStorage/mssql_2019:/var/opt/mssql/data2
 -p 1433:1433
 -e ACCEPT_EULA=Y
 -e SA_PASSWORD=[密碼]
 -d mcr.microsoft.com/mssql/server

新增資料庫時出現錯誤

標題: Microsoft SQL Server Management Studio
------------------------------

資料庫 'test' 的 建立 失敗。  (Microsoft.SqlServer.Smo)

如需說明,請按一下: https://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=16.100.37971.0&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=建立+Database&LinkId=20476

------------------------------
其他資訊:

執行 Transact-SQL 陳述式或批次時發生例外狀況。 (Microsoft.SqlServer.ConnectionInfo)

------------------------------

CREATE FILE encountered operating system error 2(The system cannot find the file specified.) while attempting to open or create the physical file '/var/opt/mssql/data2/test.mdf'.
CREATE DATABASE failed. Some file names listed could not be created. Check related errors. (Microsoft SQL Server, 錯誤: 5123)

如需說明,請按一下: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=15.00.4033&EvtSrc=MSSQLServer&EvtID=5123&LinkId=20476

------------------------------
按鈕:

確定
------------------------------

然後我看了一下data2的內容,因為我在我本地的d://DockerStorage/mssql_2019有新增一個空白文件檔,但data2內容是空的...看來掛載是失敗的...

會不會是沒權限呢?我也沒權限改權限阿...

https://ithelp.ithome.com.tw/upload/images/20200613/20110337zlbSmzCjgt.png


2020-10-08
(已解決)請教docker如何掛載實體資料夾
已解決問題了,兩個原因導致失敗

  1. 目前docker的Volume僅限C槽
  2. host端資料夾要補上docker_user使用者的可編輯權限

1 個回答

0
w4560000
iT邦新手 3 級 ‧ 2020-06-07 14:58:05

試試 -v //d/DockerStorage/mssql_2017:/var/opt/mssql/data

看更多先前的回應...收起先前的回應...
舜~ iT邦高手 1 級 ‧ 2020-06-07 15:03:09 檢舉

docker run -it -e ACCEPT_EULA=Y -e SA_PASSWORD=passwd -p 1433:1433 -d mcr.microsoft.com/mssql/server -v //d/DockerStorage/mssql_2017:/var/opt/mssql/data
一樣出錯
/opt/mssql/bin/permissions_check.sh: line 59: exec: -v: invalid option

w4560000 iT邦新手 3 級 ‧ 2020-06-07 16:28:55 檢舉

docker run -it -d -e ACCEPT_EULA=Y -e MSSQL_SA_PASSWORD="TESTtest1234" -e MSSQL_TCP_PORT=1234 -p 1234:1234 -v //c/temp/DockerStorage/mssql_2017:/var/opt/mssql/data -d mcr.microsoft.com/mssql/server

你試試看這段 我是可以成功的

w4560000 iT邦新手 3 級 ‧ 2020-06-07 16:34:23 檢舉

我想可能是你把 -v 放到最後面的關西,因為在docker run 最後面的script會覆蓋imgae 的最後一個CMD的指令,你的error訊息已經在linux環境裡了,我猜錯誤是MSSQL container已經建起來,此時等同在linux的終端機上 執行 -v //d/DockerStorage/mssql_2017:/var/opt/mssql/data才出錯

舜~ iT邦高手 1 級 ‧ 2020-06-08 06:38:21 檢舉

感謝提醒,我調整後有進展了
docker run -it -e ACCEPT_EULA=Y -e SA_PASSWORD=passwd -p 1433:1433 -v //d/DockerStorage/mssql_2017:/var/opt/mssql/data -d mcr.microsoft.com/mssql/server

但她出現一個不太能理解的錯誤,不是應該是D槽嗎?怎麼會出現C槽
Server ERROR: Setup FAILED copying system data file 'C:\templatedata\master.mdf' to '/var/opt/mssql/data/master.mdf': 2(The system cannot find the file specified.)
ERROR: BootstrapSystemDataDirectories() failure (HRESULT 0x80070002)

w4560000 iT邦新手 3 級 ‧ 2020-06-08 09:52:22 檢舉

你的錯誤訊息跟這個issue很像
https://github.com/microsoft/mssql-docker/issues/600
https://github.com/docker/for-win/issues/6646

試試更新docker desktop version 至 2.3.0.3

Han iT邦新手 2 級 ‧ 2020-06-08 10:10:06 檢舉

印象中 windows是不是要先開他的GUI 設定允許的共用資料夾啊?
Resource裡面的File Sharing

w4560000 iT邦新手 3 級 ‧ 2020-06-08 10:13:30 檢舉

我這段可以work

docker run -it -e ACCEPT_EULA=Y -e SA_PASSWORD=TESTtest1234 -p 9797:1433 -v //c/temp/DockerStorage:/var/opt/mssql/data -d mcr.microsoft.com/mssql/server

你的密碼需要調整一下 它有規範SA預設密碼
ERROR: Unable to set system administrator password: Password validation failed. The password does not meet SQL Server password policy requirements because it is too short. The password must be at least 8 characters..

w4560000 iT邦新手 3 級 ‧ 2020-06-08 10:24:46 檢舉

Han 嗯嗯是的 原po也可以順便檢查一下

舜~ iT邦高手 1 級 ‧ 2020-06-09 11:11:41 檢舉

docker版本是最新的了,密碼是示意的複雜度ok,
我把路徑改到C槽還是不行

docker run -it -e ACCEPT_EULA=Y -e SA_PASSWORD=[密碼] -p 1433:1433 -d mcr.microsoft.com/mssql/server -v //c/DockerStorage/mssql_2017:/var/opt/mssql/data

錯誤訊息

SQL Server 2019 will run as non-root by default.

This container is running as user mssql.

To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.

2020-06-09 03:04:07.17 Server Setup step is copying system data file 'C:\templatedata\master.mdf' to '/var/opt/mssql/data/master.mdf'.

2020-06-09 03:04:07.43 Server ERROR: Setup FAILED copying system data file 'C:\templatedata\master.mdf' to '/var/opt/mssql/data/master.mdf': 2(The system cannot find the file specified.)

ERROR: BootstrapSystemDataDirectories() failure (HRESULT 0x80070002)

我要發表回答

立即登入回答