
error message:
✘ Contain… Error response from daemon: Conflict. The container name "/mssql_db" is already in use by container "44a71682bce20940b5cf17810ef89e8999a070708b0262b275e796fe845e0b7f". You have to remove (or rename) that container to be able to reuse that name. 0.0s
Error response from daemon: Conflict. The container name "/mssql_db" is already in use by container "44a71682bce20940b5cf17810ef89e8999a070708b0262b275e796fe845e0b7f". You have to remove (or rename) that container to be able to reuse that name.
這個錯誤訊息代表你的電腦裡已經有一個名字叫做 mssql_db 的容器在執行,或者雖然停止了但名稱還被佔用著。Docker 不允許兩個容器使用同一個名稱。
解決方法
你可以選擇以下其中一種方式來處理:
移除舊的容器
如果你不需要原本那個容器,可以直接刪除它,讓新的設定生效。請在終端機輸入:
Bash
docker rm -f mssql_db
執行完後,再次執行 docker compose up 就可以正常啟動了。
使用 Compose 自動重新建立
你可以加上參數,讓 Docker Compose 自動處理掉衝突的容器:
Bash
docker compose up --force-recreate
這樣它會強制移除舊的容器並根據你現在的 yaml 檔案重新建立一個。
修改名稱
如果你想保留原本的容器,那就必須修改 docker-compose.yml 檔案中的 container_name。例如改名為 mssql_db_new:
YAML
services:
db:
image: mcr.microsoft.com/azure-sql-edge
container_name: mssql_db_new
修改完存檔後,再重新執行啟動指令即可。
目前電腦上有哪些容器正在跑嗎?
你可以使用以下指令來查看電腦上目前正在執行的容器:
Bash
docker ps
這個指令會列出所有正在運作中的容器,包含它們的 ID、名稱、使用的映像檔以及埠號對應。
如果你想看到所有的容器,包含那些已經停止(Exited)但名稱還佔用著空間的容器,請使用:
Bash
docker ps -a
這能幫你確認剛才報錯的 mssql_db 是不是處於停止狀態但還沒被移除。
欄位說明
在輸出的表格中,你可以特別留意這幾項:
- NAMES:容器的名稱,剛才報錯的 mssql_db 就會出現在這一欄。
- STATUS:顯示 Up 代表正在跑,Exited 代表已停止。
- PORTS:顯示容器對外的連接埠。
刪掉後, 需要重新下載 image?
不需要重新下載 image。
刪除容器(Container)只是把那個正在跑的執行個體移除,原本下載好的映像檔(Image)會保留在你的電腦裡。
為什麼不需要重載
映像檔就像是軟體的安裝光碟,而容器是由光碟執行起來的一個程式。你把執行中的程式關掉並刪除,光碟檔案還是會在你的硬碟裡。
當你下一次執行 docker compose up 時,Docker 會檢查本地端是否已經有 mcr.microsoft.com/azure-sql-edge,如果有,它就會直接秒速啟動,不需要再從網路上下載好幾百 MB 的資料。
如何安全刪除並重啟
你可以按照以下步驟操作:
- 移除那個狀態為 Exited 的舊容器:
Bash
docker rm mssql_db
- 重新啟動你的專案:
Bash
docker compose up -d
加上 -d 參數可以讓它在背景執行,這樣你就不會因為關掉視窗而導致容器停止。
需要我幫你確認你的資料卷(Volumes)是否會保留原本資料庫裡的資料嗎?
