大家好,
我正在嘗試進入某個容器的 shell,結果出現了這個畫面:
我需要做什麼才能啟用這些功能?我的 compose 檔案裡已經有 tty: true……但沒有用。我執行的其他容器都可以附加 shell,只有這個不行。如果我嘗試「執行」——就會出現這個錯誤:
完全卡住了……
如果你只需要使用 QNAP 的 shell,可以執行
docker exec -it containernme sh
這樣你就會進入該容器的 shell 環境
我應該在哪裡執行那個指令?是在 SSH shell 裡嗎?
你打開一個普通的 shell(在 Windows 中通過 CMD 執行 SSH 指令,或使用任何相容 SSH 的主控台程式,如 putty)
同樣的錯誤:
[jono@NA9D-NAS-3 ~]$ docker exec -it vikunja-vikunja-1 sh
OCI runtime exec failed: exec failed: unable to start container process: exec: "sh": executable file not found in $PATH: unknown
[jono@NA9D-NAS-3 ~]$
這就是為什麼我在問有關 Compose 的事情……
我猜這個容器沒有 shell
我剛剛在 uptime-kuma 上嘗試了這個,運作得很好
在 docker compose 文件中新增以下兩行,以便在 CS 圖形介面中存取 tty
stdin_open: true
tty: true
我已經做了。沒有任何改變……
很奇怪,我可以在一個簡單的網路工具應用程式中連線並執行指令
services:
network-tools:
image: 'jonlabelle/network-tools:latest'
restart: unless-stopped
container_name: network-tools
stdin_open: true
tty: true
networks:
- backendApps
networks:
backendApps:
external: true
可能你的應用程式沒有提供互動式 shell,你需要使用 Execute command(執行命令)來啟動一個 shell。
選擇你想要的(bash/sh),然後點擊 execute(執行),你就會得到一個登入 shell,可以在裡面執行指令。
看看這是否對你有幫助。
這很可能表示他們沒有在 docker 映像中打包 bash 指令。所以我認為你無法用 shell 連接到它。
/bin/sh 有用嗎?
如果這個 docker 是開源的,你也許可以查看 /bin 路徑下有哪些程式,然後用執行主控台(execute console)作為指令來運行它。
兩個主控台都沒有效。我不確定是否有辦法加入它。
問題在於:要在容器內執行指令,該指令必須存在於容器映像檔內。如果你的映像檔沒有 shell,你就無法執行 exec。
你也許可以新增一個 shell,但這需要知道映像檔是如何建構的。幸運的是,這是一個開源的建構。這裡有 Dockerfile:
從這裡可以看到它是基於 Alpine Linux 建構的。所以,建立一個以你的映像檔為基礎的 Dockerfile,並加入 bash。
FROM vikunja/vikunja
RUN apk add --no-cache bash
然後建構新的映像檔:
docker build newimage
如果你是用 docker-compose 檔案來啟動容器,你需要把 image 改成 “newimage”(或你想要的名稱)。然後你就可以在容器內 exec bash 了。
好的,謝謝。我得再研究一下。這樣更新起來確實有點麻煩。也許我會去 Vikunja 論壇問問為什麼沒有 shell。我正在嘗試執行診斷指令。
實際上,如果你只是想要除錯,那麼加入一個 shell 來協助也可以視為除錯流程的一部分。這不需要是永久性的……一旦你取得所需的資訊,就可以還原回原本的映像檔,然後繼續進行。
……當然,你很可能會碰到我經常遇到的情況:開啟除錯功能後,問題就自己解決了。![]()