回答
有一個commit PR其加入到該文檔:
注:此命令(
attach
)是不適合的容器中運行的一個新進程。 參見:docker exec
。
答案爲 「Docker. How to get bash\ssh inside runned container (run -d
)?」 示出的區別:
(搬運工> = 1.3)如果我們使用
docker attach
,我們可以僅使用一個殼的實例。
因此,如果我們想打開集裝箱的外殼的新實例新的終端,我們只需要運行docker exec
如果泊塢窗容器使用
/bin/bash
命令啓動,您可以訪問它使用連接,如果沒有,那麼你需要執行使用exec
在容器內部創建bash實例的命令。
正如this issue提到:
- 附上不是在一個容器中運行一個額外的東西,它是連接到正在運行的進程。
- 「
docker exec
」專門用於在已啓動的容器中運行新事物,無論是殼還是其他過程。
同樣的問題補充:
雖然
attach
沒有得到很好的命名特別是因爲LXC命令lxc-attach
的,(這是更接近docker exec <container> /bin/sh
,但LXC具體的),它有一個特定的從字面上將您附加到Docker啓動的過程。
根據過程的不同,行爲可能會有所不同,例如附加到/bin/bash
會給你一個shell,但是附加到redis-server會像你剛剛直接啓動redis而沒有守護進程一樣。
當容器使用/斌/慶典開始那麼變得容器PID 1和搬運工ATTACH用於獲取內部容器的PID 1。所以碼頭附加<容器ID>將帶你進入bash終端,因爲它是PID 1,正如我們在啓動容器時提到的那樣。從容器中退出將停止容器。
而在docker exec命令中,您可以指定要輸入的shell。它不會把你帶到容器的PID 1。它將爲bash創建一個新的進程。 docker exec -it < container-id> bash。 從容器中退出不會阻止容器。
您還可以使用nsenter進入容器內部。 nsenter -m -u -n -p -i -t <容器的PID> 您可以使用以下方法找到容器的PID:docker inspect < container-id> | grep的PID
注:如果你有那麼-d標誌退出了容器不會停止的容器,無論您使用附加或EXEC進去開始你的容器。
- 1. 「碼頭日誌」和「碼頭附加」有什麼區別?
- 2. 執行mysql腳本碼頭
- 3. 執行到碼頭雲?
- 4. TestNG和JUnit執行之間的區別
- 5. 管道碼頭運行容器ID到碼頭執行
- 6. '執行'和'以腳本執行'之間的區別
- 7. powershell - 本地執行和遠程執行之間的區別
- 8. 碼頭根crontab作業未執行
- 9. boot2docker相當於碼頭執行
- 10. 如何停止執行碼頭亞軍
- 11. cURL頭之間的區別
- 12. 執行兩個命令與碼頭執行
- 13. 檢查點和碼頭導出之間的區別
- 14. 碼頭集裝箱和服務之間的區別
- 15. Logrotate postrotate和碼頭執行器奇怪的行爲
- 16. jquery ajax頭和beforesend之間的區別
- 17. 碼頭圖像和碼頭搜索命令有什麼區別?
- 18. 在執行Jenkinsfile之前執行代碼
- 19. 編譯代碼和可執行代碼有什麼區別?
- 20. 覆蓋RaisePropertyChanged來執行附加代碼
- 21. 編譯時間,加載時間和執行時間之間的區別?
- 22. 之間的代碼行之間的數據沒有執行
- 23. SOAP安全頭和SOAP頭之間的區別
- 24. 請求頭緩存策略和響應頭之間的區別
- 25. 無法執行使用調用命令的碼頭運行
- 26. 執行碼頭運行時的權限錯誤
- 27. oAuth從頭或之後執行
- 28. 執行分支合併和Stream_to_stream合併之間的區別
- 29. Storm UI:執行和進程延遲之間的區別
- 30. 解釋計劃和執行計劃之間的區別