本文整理 Docker 安裝及運行時最常見錯誤,包含安裝依賴問題、daemon 啟動錯誤、容器 crash、端口衝突、storage 驅動與 network/DNS 問題,每個錯誤附原因分析、判斷方法與解決步驟,方便快速排錯。
Docker 安裝階段常見錯誤
錯誤一:套件依賴安裝失敗
# apt-get install docker-ce 失敗
# 常見訊息: unmet dependencies
原因:系統套件版本過舊或缺少依賴。
判斷:檢查系統版本與套件列表:apt-cache policy docker-ce
解決:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
sudo apt install docker-ce
錯誤二:GPG key 或 repository 設定錯誤
# 錯誤訊息: NO_PUBKEY 或 repository not found
原因:官方源 GPG key 錯誤或 repository 地址錯誤
判斷:檢查 /etc/apt/sources.list.d/docker.list 與 GPG key
解決:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo add-apt-repository \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
錯誤三:防火牆阻擋或 iptables 錯誤
# 安裝後 daemon 無法啟動或容器無法連線
原因:防火牆規則或 iptables 阻擋 Docker 網路
判斷:檢查防火牆狀態:sudo ufw status
解決:
sudo ufw allow 2375/tcp
sudo ufw allow 2376/tcp
sudo ufw reload
sudo systemctl restart docker
Docker daemon 常見錯誤與排查解決方法
錯誤一:Cannot connect to the Docker daemon
# Cannot connect to the Docker daemon at unix:///var/run/docker.sock
原因:daemon 未啟動或 socket 權限不足
判斷:systemctl status docker, journalctl -u docker
解決:
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker
錯誤二:permission denied while trying to connect
# 權限不足
原因:使用者不在 docker 群組
判斷:groups $USER
解決:
sudo usermod -aG docker $USER
newgrp docker # 或重新登入
docker ps
錯誤三:failed to start daemon: no space left on device
# 磁碟空間不足
原因:磁碟已滿,daemon 無法啟動
判斷:df -h, docker system df
解決:docker system prune -a –volumes # ⚠️ 會清除所有未使用資料 sudo systemctl restart docker
錯誤四:Error starting daemon: failed to initialize
# daemon 初始化失敗
原因:daemon.json 配置錯誤或 storage driver 不支援
判斷:cat /etc/docker/daemon.json, docker info | grep “Storage Driver”
解決:修正配置或使用支援的 storage driver (overlay2)
錯誤五:Bind for 0.0.0.0:2375 failed
# 端口被占用
原因:端口已被其他進程使用
判斷:sudo lsof -i :2375
解決:sudo kill 1234 # 替換為實際 PID sudo systemctl restart docker
錯誤六:overlay2 not supported
# storage 驅動不支援
原因:文件系統不支援 overlay2
判斷:docker info | grep “Storage Driver”
解決:修改 daemon.json 或更換支援 overlay2 的文件系統
其他運行階段常見錯誤案例
Container Crash(Exited)
docker ps -a
docker logs my_container # 替換為實際容器名稱
docker start my_container
原因:應用程式崩潰或依賴缺失
處理方式:查看日誌修正環境或依賴,重啟容器
Port 衝突
sudo lsof -i :80
docker run -d -p 8080:80 --name web nginx
原因:端口被占用
處理方式:釋放端口或修改映射
Image 拉取錯誤
docker pull nginx
原因:image 名稱錯誤或網路問題
處理方式:確認名稱與網路,重新拉取
Network 無法連線
docker network ls
docker network inspect my_network # 替換為實際 network
原因:容器不在同一 network 或網路配置錯誤
處理方式:確認 network,必要時重建
DNS 解析失敗
docker run -d --dns 8.8.8.8 --name test-nginx nginx
原因:DNS 配置錯誤或容器無法解析
處理方式:指定有效 DNS
FAQ 常見問題
Docker daemon 無法啟動怎麼辦?
通常是 daemon 未啟動、磁碟空間不足、配置錯誤或端口占用。
解決方式:
- systemctl status docker, journalctl -u docker 查看狀態與日誌
- 清理磁碟或修正配置
- 釋放占用端口
- sudo systemctl restart docker 重新啟動
permission denied 怎麼解?
表示使用者不在 docker 群組。
解決方式:
- sudo usermod -aG docker $USER
- newgrp docker 或重新登入
- docker ps 確認權限更新
Container 為什麼會停止?
通常因應用程式崩潰或缺依賴。
解決方式:
- docker logs my_container 查看日誌
- 修正環境或依賴
- docker start my_container 重啟容器
Port 衝突怎麼辦?
端口被其他程序占用,容器無法啟動。
解決方式:
- sudo lsof -i :80 查看占用
- 修改映射端口 docker run -d -p 8080:80 –name web nginx
Image 拉不到怎麼辦?
可能是名稱錯誤或網路問題。
解決方式:
- 確認 image 名稱與 tag
- 檢查網路連線
- 重新拉取 docker pull <image_name>
Network 連線問題怎麼排?
容器無法互通通常是 network 配置錯誤。
解決方式:
- docker network ls 列出網路
- docker network inspect my_network 查看設定
- 必要時重建 network
有哪些 storage 驅動錯誤?
通常出現 overlay2 not supported 或初始化失敗。
解決方式:
- 修改 daemon.json storage-driver
- 確保文件系統支援 overlay2 (xfs/ext4)
如何判斷 Docker 是否正常?
可以透過容器與系統資訊確認:
- docker ps 列出運行容器
- docker info 查看系統資訊
- 檢查 daemon 狀態與日誌
