# Docker容器操作速查 ## 檢查 container 狀態與日誌 **重點:** `docker ps` / `docker ps -a` / `docker logs`。 **說明:** `ps` 檢視容器狀態,`logs` 看容器最後輸出或錯誤訊息(有助除錯)。 ```bash # 列出正在執行的 container sudo docker ps # 列出包含已停止的所有 container sudo docker ps -a # 看 container 的輸出日誌 sudo docker logs cme ``` --- ## 啟動 / 停止 / 刪除 container **重點:** `start` / `stop` / `rm` 三個指令管理生命週期。 **說明:** `rm -f` 可強制刪除;刪除 container 不會刪 image,也不會刪你用 `-v` 掛載到 host 的目錄。 ```bash # 啟動(若 container 停止) sudo docker start cme # 停止(暫時關閉) sudo docker stop cme # 強制刪除(永久移除) sudo docker rm -f cme ``` ## 建立持久 container (若 container 被刪或不存在) **重點:** 用 `--entrypoint tail -f /dev/null` 或 `--entrypoint tail` 讓 container 常駐,再用 `docker exec` 進入。 **說明:** 覆寫 image 的 ENTRYPOINT(避免 image 預設 entrypoint 干擾),並把當前工作目錄掛載進 container 的 `/work`。 ```bash # 建立持久 container(只做一次) sudo docker run -d --name cme \ -v "$(pwd)":/work \ --network host \ --entrypoint tail \ localhost/crackmapexe-local:latest \ -f /dev/null # 之後要進去: sudo docker exec -it cme /bin/sh # 做完刪掉 container: sudo docker rm -f cme ``` --- ## 一次性直接執行 cme 指令(不進 shell) **重點:** 如果你只要跑一次 `cme`,可直接把 `cme` 子命令當作 container 的 command 傳入。 **說明:** 因為 image 的 ENTRYPOINT 已設定為 `cme`,直接傳子命令即可(container 執行完會自動被刪除,若使用 `--rm`)。 ```bash # 範例:單次執行 smb 測試 sudo docker run --rm -it --network host -v "$(pwd)":/work \ localhost/crackmapexe-local:latest \ smb 10.10.10.10 -u user -p /wordlists/nmap.lst -t 1 --no-progress ``` --- ## 退出 container shell **重點:** 使用 `exit` 或 `Ctrl+D`。 **說明:** 這會離開容器內的互動 shell;如果容器是以常駐模式(例如執行 `tail -f /dev/null`)啟動,容器本身會繼續執行;若容器是臨時的(`--rm`)則會在退出時被刪除。 ```bash # 在 container 互動 shell 裡: exit # 或 Ctrl+D ``` --- ## 再次進入(重複使用已存在的持久 container) **重點:** 使用 `docker exec -it <name>` 進入已在執行的 container。 **說明:** 適合你已啟動一個常駐 container(例如 name 為 `cme`)並想重複進去互動時使用。 ```bash sudo docker exec -it cme /bin/sh ``` --- ## 延伸運用 ### 把 container 裡的檔案複製回 host **重點:** 使用 `docker cp` 從 container 複製檔案。 **說明:** 若你在 container 內產生結果檔但沒把該路徑掛載到 host,可用此指令拷回 host。 ```bash sudo docker cp cme:/path/inside/container/output.txt /home/john/output.txt ``` --- ### 常見小技巧與注意事項 **重點:** 挂載、檔案擁有權、`--user`、以及 `--network host` 的差異。 **說明:** * `-v "$(pwd)":/work`:把 host 的當前目錄掛到 container 的 `/work`,在 `/work` 的變更會同步回 host。 * 若不想在 host 上產生 root-owned 檔案,可啟 container 時加上 `--user "$(id -u):$(id -g)"`。 * `--network host` 在 Linux 上最直接(容器共用 host 網路),在 macOS/Windows 行為不同。 * 刪除 container(`docker rm`)**不會**刪 image;刪 image 請用 `docker rmi`。 * 若使用的是 Podman,把 `docker` 換成 `podman` 即可(CLI 相似)。 ```bash # 在啟動時避免 root-owned 檔案 sudo docker run --rm -it --network host -v "$(pwd)":/work \ --user "$(id -u):$(id -g)" \ localhost/crackmapexe-local:latest /bin/sh ``` --- 如果你要我把上面任一段 **替你填入 exact 值(例如:用你目前目錄、target IP、username、wordlist 路徑)**,我可以立刻幫你生成可直接複製執行的一行命令,回覆 `填 exact 指令` 並附上 target IP / username / wordlist 路徑即可。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up