當我在 centOS7 服務上運行“docker exec -it docker -name bash”時,它將進入 docker 容器并可以運行“python xx.py config.yaml”來執行一些作業。但是如果我使用 Jenkins shell 運行“docker exec -it docker-name bash”,它將沒有回應,我在后面寫“python xx.py config.yaml”,Jenkins 顯示[ python: can't open file 'xxx. py': [Errno 2] No such file or directory],我認為這個錯誤沒有進入docker容器,所以在docker容器中找不到python檔案。如何使用Jenkins shell進入docker容器。
uj5u.com熱心網友回復:
當您運行時docker exec -it docker-name bash,您會在容器內獲得一個連接到控制臺的互動式外殼,并且您在控制臺中鍵入的下一個命令將在該外殼中執行。
但是詹金斯沒有控制臺。它正在執行一個腳本,標準輸入連接到一個空設備(它總是在讀取時回傳檔案結尾)。所以實際上它正在執行相當于
docker exec -it docker-name bash </dev/null(這/dev/null是空設備并將<其連接到命令的標準輸入)。如果您在控制臺上執行此操作,則不會發生任何事情,您將再次獲得原始提示。
但是在這種情況下,您根本不必也不應該運行 bash。你給出docker exec你想在容器中運行的命令,它就會在那里運行。所以你只是做
docker exec -i docker-name python xx.py config.yaml
并運行 python 命令,列印任何輸出,當命令結束時,再次與容器斷開連接。
我省略了 ,-t因為它指示 docker 使用終端(控制臺),但 Jenkins 沒有任何控制臺,只是-i指示它連接 stdin、stdout 和 stderr 就足夠了。
現在還有一種方法可以在 bash 的標準輸入上發送命令,類似于控制臺的操作,但我強烈建議在嘗試之前閱讀 bash 的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/510160.html
