2025年2月8日 星期六

docker 容器的啟用

Error response from daemon: container 8f95a778f4cc9687267077fafe956b0a0a6e0aa4c689952e50883d4b222659c0 is not running

錯誤信息表示,你試圖對一個容器執行操作時,該容器目前未處於運行狀態。具體原因可能有以下幾種:


問題原因

  1. 容器未啟動:

    • 你試圖執行如 docker exec 等需要容器正在運行的命令,但該容器已停止。
  2. 容器已經退出:

    • 容器的進程結束了(例如運行的應用程序崩潰、腳本執行完成等)。
  3. 容器 ID 或名稱錯誤:

    • 提供的容器 ID 或名稱不正確,導致 Docker 找不到正在運行的容器。

解決方法

1. 查看容器狀態

運行以下命令查看容器的運行狀態:

docker ps -a
  • docker ps:僅顯示正在運行的容器。
  • docker ps -a:顯示所有容器(包括停止的容器)。

檢查容器 8f95a778f4cc 是否已停止或未找到。


2. 啟動容器

如果容器已停止,可通過以下命令啟動容器:

docker start 8f95a778f4cc

啟動後再次嘗試執行命令,例如:

docker exec -it 8f95a778f4cc bash

3. 檢查容器日誌

如果容器意外停止,查看日誌以排查問題:

docker logs 8f95a778f4cc

根據日誌信息調整配置或重啟容器。


4. 重建容器

如果容器因某些配置問題無法正常運行,可以刪除並重新創建容器:

docker rm 8f95a778f4cc
docker run [OPTIONS] IMAGE [COMMAND]

5. 容器 ID 或名稱確認

確保輸入的容器 ID 或名稱正確,可以使用以下命令查詢:

docker ps -a --filter "name=部分容器名稱"

這將過濾出名稱中包含特定關鍵字的容器。


建議流程

  1. 執行 docker ps -a 檢查容器狀態。
  2. 如果容器未運行,使用 docker start 啟動。
  3. 如果容器崩潰或報錯,查看日誌進行調整。
  4. 如果需要操作停止的容器文件系統,可以使用:
    docker start 8f95a778f4cc
    docker exec -it 8f95a778f4cc bash
    或者用:
    docker run -it --rm IMAGE_NAME bash
    創建一個新容器。

docker run 詳解

 docker run 是 Docker 的一個核心命令,用於創建並運行容器。它結合了 拉取映像 (pull)、創建容器 (create) 和 啟動容器 (start) 的功能,提供了快速啟動容器的能力。

以下是 docker run 的主要功用及功能介紹:


主要功用

  1. 創建容器:

    • 基於指定的 Docker 映像創建一個新的容器實例。
  2. 運行容器:

    • 啟動創建的容器並執行指定的命令(默認為映像內的 ENTRYPOINT 或 CMD)。
  3. 自動下載映像:

    • 如果指定的映像尚未本地存在,docker run 會自動從 Docker Hub 或其他註冊伺服器拉取。
  4. 容器配置與運行管理:

    • 支援傳入多種參數,讓用戶可以靈活地配置容器(如網路、端口映射、環境變數等)。

基本語法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • OPTIONS:可選參數,用於配置容器的運行行為。
  • IMAGE:指定用於創建容器的映像。
  • COMMAND 和 ARG:可選,覆蓋默認的命令或傳遞額外參數。

常見功能與用法

1. 前台運行容器

默認情況下,docker run 會啟動容器並附加到當前終端,顯示容器內的輸出。

docker run ubuntu echo "Hello, Docker!"
  • 使用 ubuntu 映像,運行 echo 命令。

2. 後台運行容器 (-d)

使用 -d 選項讓容器在後台運行(即 分離模式)。

docker run -d nginx
  • 在後台啟動一個 Nginx 容器。

3. 設置端口映射 (-p)

使用 -p 選項將容器內的服務端口映射到主機端口。

docker run -d -p 8080:80 nginx
  • 主機的 8080 埠映射到容器內的 80 埠,這樣主機可通過 http://localhost:8080 訪問容器中的 Nginx。

4. 設置環境變數 (-e)

通過 -e 傳遞環境變數到容器中。

docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
  • 設置 MySQL 的 root 密碼。

5. 掛載卷(數據持久化) (-v)

使用 -v 選項將主機目錄掛載到容器內部。

docker run -d -v /my/data:/data nginx
  • 主機的 /my/data 目錄掛載到容器內的 /data,實現數據共享與持久化。

6. 命名容器 (--name)

通過 --name 為容器指定一個名稱,方便管理。

docker run --name my-nginx -d nginx
  • 創建一個名稱為 my-nginx 的 Nginx 容器。

7. 限制資源 (--memory、--cpus)

可以通過選項限制容器使用的 CPU 和內存資源。

docker run --memory=512m --cpus=1 nginx
  • 限制容器最多使用 512MB 的內存和 1 個 CPU 核心。

8. 交互模式 (-it)

使用 -it 啟動容器,進入交互式終端。

docker run -it ubuntu bash
  • 啟動一個 Ubuntu 容器並進入其終端,允許用戶直接執行命令。

9. 自定義網絡 (--network)

可以指定容器所屬的網絡。

docker run --network=my-network nginx
  • 將容器連接到名為 my-network 的自定義 Docker 網絡。

10. 臨時容器(自動刪除) (--rm)

使用 --rm 選項讓容器在退出時自動刪除。

docker run --rm ubuntu echo "This is a temporary container."
  • 適用於執行短暫任務的容器。

常見場景應用

  1. 測試新映像:

    • 使用 docker run 快速啟動容器測試映像功能。
  2. 部署應用:

    • 配合 -d、-p、-v 等選項快速部署 Web 服務、數據庫等應用。
  3. 臨時任務:

    • 使用 --rm 和 -it 運行臨時容器進行測試或診斷。
  4. 多容器協作:

    • 與 Docker 網絡結合,使用 --network 將多個容器連接在一起,實現複雜應用部署。


使用案例

以下是一些常見的 docker run 使用案例,展示如何啟動容器並執行不同的操作。


1. 運行一個交互式的容器

啟動一個 Ubuntu 容器,並進入容器內的交互式 Shell 環境。

docker run -it ubuntu
  • 選項說明:
    • -i:允許交互式輸入。
    • -t:分配一個虛擬終端。
    • ubuntu:要運行的映像名稱。

2. 在容器中執行一個命令

啟動一個 Alpine 容器,執行命令後自動退出。

docker run alpine echo "Hello from Docker!"
  • 結果:顯示 "Hello from Docker!",然後容器自動停止。

3. 後台運行容器

啟動一個 Nginx 容器並在後台運行。

docker run -d nginx
  • 選項說明:
    • -d:以後台模式運行容器(detached mode)。
    • nginx:要運行的映像名稱。

4. 指定容器名稱

為容器指定一個自定義名稱。

docker run --name my-nginx -d nginx
  • 結果:容器名稱為 my-nginx,而不是 Docker 默認分配的隨機名稱。

5. 綁定主機端口

將主機的 8080 端口映射到容器的 80 端口。

docker run -d -p 8080:80 nginx
  • 選項說明:
    • -p 8080:80:將主機的 8080 端口映射到容器的 80 端口。
  • 結果:可通過瀏覽器訪問 http://localhost:8080。

6. 掛載主機目錄到容器

將主機上的目錄掛載到容器內。

docker run -d -v /host/path:/container/path nginx
  • 選項說明:
    • -v:指定掛載的目錄(主機路徑:容器內路徑)。
  • 應用場景:例如共享配置文件或數據。

7. 設置環境變量

為容器設置環境變量。

docker run -d -e ENV_VAR_NAME=value nginx
  • 選項說明:
    • -e:設置環境變量。

8. 限制資源使用

限制容器使用的 CPU 和內存資源。

docker run -d --memory="512m" --cpus="1.0" nginx
  • 選項說明:
    • --memory:限制內存使用(如 512MB)。
    • --cpus:限制 CPU 使用數量(如 1 核心)。

9. 連接到指定的網絡

啟動容器並連接到指定的 Docker 網絡。

docker network create my-network
docker run --network my-network -d nginx
  • 應用場景:適用於容器之間需要通信的場景。

10. 自動刪除容器

運行容器後自動刪除它。

docker run --rm ubuntu echo "Temporary container"
  • 選項說明:
    • --rm:在容器退出後自動刪除。

範例:運行 MySQL 容器

啟動一個 MySQL 容器,並設置數據庫密碼。

docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
  • 選項說明:
    • --name:為容器命名為 my-mysql。
    • -e:設置環境變量 MYSQL_ROOT_PASSWORD。
    • mysql:5.7:使用 MySQL 5.7 映像。

kali linux 如何獲得及變更root密碼

 在 Kali Linux 中, 獲取或變更 root 密碼 需要根據不同的情況來操作。 1. 檢查 root 是否已啟用 在 Kali Linux 2020.1 之後, root 帳戶 預設是禁用的 ,所以需要先啟用 root 。 檢查當前用戶是否為 root : ...