Docker

Remove Docker Images, Containers, and Volumes

Purging All Unused or Dangling Images, Containers, Volumes, and Networks

# all & force
docker system prune -af

Remove one or more specific images

# images
docker images -a

# remove image
docker rmi Image Image

Removing Containers

# containers
docker ps -a

# remove containers
docker rm ID_or_Name ID_or_Name

Remove all exited containers

Removing Volumes

daemon.json 的作用

docker 安裝後預設沒有 daemon.json 這個配置檔案,需要進行手動建立。配置檔案的預設路徑:/etc/docker/daemon.json

修改容器的 DNS 伺服器

檢視容器的 dns 解析設定檔案,也可以檢查 docker 執行環境 DNS

docker run busybox:latest cat /etc/resolv.conf

為容器 mybusybox 執行手動設定一個 dns 伺服器,並檢查是否生效

docker run --dns 10.0.0.2 --name mybusybox busybox:latest cat /etc/resolv.conf

定製化容器執行環境的 dns 伺服器,在 Host OS 上編輯下面檔案,增加 dns 伺服器,並重啟 docker 服務。

cat /etc/docker/daemon.json

重啟服務

sudo service docker restart

複製容器內資料

載入 volume

使用 root 身分

host.docker.internal - 宿主

gateway.docker.internal - 網路閘道

Docker-compose

預設會抓 docker-compose.yml 根目錄下的 .env

也可以使用 .env.dev, .env.prod 等等檔案,然後使用 --env-file .env.dev 來選取

可以使用 docker-compose config 來輸出結果

docker-compose up 啟動容器超時錯誤:ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.

免下 sudo

建置多架構的映像檔

https://github.com/docker/buildx

如何在 docker-compose.yml 中支持相同的 docker build 命令?

對於代碼信息來說,您的情況需要略微調整 docker-compose.yml 配置以模仿相同行為。以下是基於您提供的指令對 docker-compose.yml 文件的配置示例:

修改後的 docker-compose.yml 示例


逐個部分解釋:

  1. build.context

    • 這相當於 docker build . 中的 .,表示 Docker build 的上下文是當前工作目錄(.)。

    • 上下文目錄內的所有文件(包括 docker/ 資料夾)都會被 Docker daemon 用於建構映像。

  2. build.dockerfile

    • 使用 docker/Dockerfile,這相當於您在 docker build 命令中使用的 -f docker/Dockerfile

  3. build.target

    • 使用多階段構建 --target gitlab_webhook,這裡指定構建目標為您在 Dockerfile 中定義的 gitlab_webhook 階段。

  4. image

    • 這指定了構建的映像名稱為 gitlab_pr_agent,等同於 -t gitlab_pr_agent

  5. ports

    • 這是一個額外配置,將容器內的端口 3000 暴露到主機上的端口 3000


執行指令

在配置好 docker-compose.yml 後,可以使用以下指令來執行服務:

這會同時進行構建和運行,--build 確保在啟動之前重新構建映像。


注意事項:

  1. 目錄結構須正確: 如果您傳入的 contextdockerfile 路徑無法對應正確的檔案,docker-compose 會出現錯誤。假設目錄結構如下:

    docker-compose.yml 中的 context: .project/dockerfile 必須相對於 context

  2. 多階段構建 (--target) 要求的特定目標: 在您的 Dockerfile 中應該有類似以下的多階段構建:

    gitlab_webhook 是一個特定的構建階段名稱,這需要在 Dockerfile 中作為標籤定義。如果不存在,您會遇到 Unknown target stage 的錯誤。

  3. 手動構建/測試 docker-compose up 的過程: 若您在測試執行時仍然遇到錯誤,這裡有一些診斷指令:

    • 測試手動構建的效果是否正常(確認 --target 是否正確):

    • 查看構建過程的詳細日誌,以排除錯誤:

Last updated