---
# System prepended metadata

title: Docker容器操作速查-cme

---

# 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 路徑即可。
