2015-10-28 206 views
1

我是Docker的新手。我有一個Python腳本,做:執行docker exec命令時執行python腳本掛起

call(["sudo docker run -i -t -d test /bin/sh"],shell=True) 
  • 刪除了通過命令容器內部存在的軟鏈接:

    call("sudo docker exec -i "+ tag1 +" rm /usr/local/lib/boost_logger",shell=True) 
    

    其中

    1. 通過啓動一個碼頭工人容器tag1是我的碼頭集裝箱ID

    2. 我複製新文件從通過我的CentOS文件夾泊塢窗實例:

      call("sudo tar -cv * | sudo docker exec -i "+ tag1 +" tar x -C /usr/local/lib/", shell=True) 
      
    3. 我用重新創建2個軟鏈接:

      dockercommit = ["sudo","docker","commit","-m",'"Building docker instance"',"-a",'"Tejas"',tag1,dockerfilename] 
      
      call(dockercommit) 
      
    4. call("sudo docker exec -i "+ tag1 +" ln -s /usr/local/lib/libboost_logger.so /usr/local/lib/boost_logger",shell=True) 
      
      call("sudo docker exec -i "+ tag1 +" ln -s /usr/local/lib/libredis_client.so /usr/local/lib/redis_client",shell=True) 
      
    5. 現在,我通過提交泊塢窗圖像

    相同的命令通過bash工作正常。

    我面對的問題是在步驟2之後。我的腳本停止執行。在我手動點擊後,它會恢復。Ctrl + D並且腳本的其餘部分被執行!

    我在運行在virtualbox上的centos上運行docker實例。我已經分配了3個內核和大約10GB的基本內存。

    另外,如果沒有當前正在運行的docker實例並且只存在基礎映像,則按下Ctrl + D會立即釋放該腳本。

    但是,如果我有更多的實例或可能在同一腳本的第二次或第三次迭代期間,控件獲得釋放需要較長的時間。與shell=True

  • +0

    是'測試'你自己的形象?如果是這樣,你可以共享Dockerfile嗎? – booyaa

    +0

    您認爲'-i'選項的作用是什麼? – jfs

    回答

    1

    添加用戶輸入是強烈反對如提到 的documentation

    警告:執行從一個非置信源合併unsanitized輸入外殼命令使得一個程序容易受到殼這是一個嚴重的安全漏洞,可能導致任意命令執行。出於這個原因,使用shell = True時,強烈建議不要在命令字符串是從外部輸入構造情況:

    您應該改用subprocess.popen如在說明中提到。