最近使用Docker-Compose來實現對Docker容器集群的快速編排,在編寫docker-compose.yml完之后,想運行下看看結果,這一試果然試出問題。我再文件中有對容器目錄進行掛載,可是運行之后卻報錯。
這是yml文件中對mysql容器的編排
因為如果用docker run指令啟動容器的話,參數-v掛載的卷不用事先創建,所以卷mysql我一開始是沒有進行創建的,所以有沒有可能是docker-compose不會自動替我創建卷的原因呢,這里我使用docker volume create對yml文件中指定的數據卷進行創建。
可以看到此時所需的卷都已經創建,再次運行命令docker-compose up -d,發現還是一樣的結果。此時想到docker掛載除了指定卷外還能掛載主機指定路徑,嘗試將所有掛載改成系統內某個目錄,再運行,發現容器創建啟動成功。
至此可以確認時掛載卷時存在問題,我又試着不指定卷名運行,發現也能成功,所以問題應該就是出現在指定卷名掛載上。
上百度查找相關資料沒找到有用的,最后還是在谷歌上面找到解決方法。
該資料中作者用了設置volume的mountpoint的方法解決,而我選擇的是第二個方法,為此順便看了下官方對extenal參數的定義
翻譯過來就是:
如果設置為true,則指定此卷是在合成之外創建的。DOCKE編寫不嘗試創建它,並且如果不存在,則會引發錯誤。
對於3.3及以下版本的格式,外部不能與其他卷配置鍵(驅動程序、驅動程序選項、標簽)一起使用。對於第3.4版及以上版本,此限制不再存在。
在下面的示例中,不是嘗試創建一個名為[項目名稱]數據的卷,而是將一個現有的卷簡單地稱為數據,並將其裝入DB服務的容器中。
根據文檔的寫法在yml文件中加上volumes的設置:
保存后再次運行docker-compose up -d,容器啟動成功,至此問題解決。