解法直接拉到文章下方
各位前輩們好,想請教一下,我用docker linux containers新增了mssqldocker 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內容是空的...看來掛載是失敗的...
會不會是沒權限呢?我也沒權限改權限阿...
2020-10-08
(已解決)請教docker如何掛載實體資料夾
已解決問題了,兩個原因導致失敗
試試 -v //d/DockerStorage/mssql_2017:/var/opt/mssql/data
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
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
你試試看這段 我是可以成功的
我想可能是你把 -v 放到最後面的關西,因為在docker run 最後面的script會覆蓋imgae 的最後一個CMD的指令,你的error訊息已經在linux環境裡了,我猜錯誤是MSSQL container已經建起來,此時等同在linux的終端機上 執行 -v //d/DockerStorage/mssql_2017:/var/opt/mssql/data才出錯
感謝提醒,我調整後有進展了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)
你的錯誤訊息跟這個issue很像
https://github.com/microsoft/mssql-docker/issues/600
https://github.com/docker/for-win/issues/6646
試試更新docker desktop version 至 2.3.0.3
印象中 windows是不是要先開他的GUI 設定允許的共用資料夾啊?
Resource裡面的File Sharing
我這段可以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..
Han 嗯嗯是的 原po也可以順便檢查一下
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)