2016-10-14 72 views
5

我對docker很新。我想在Docker容器中構建我的python應用程序。在構建應用程序時,我想要在Pycharm中和我構建的容器中進行測試/運行。如何在我的碼頭集裝箱內運行pycharm?

如何將Pycharm pro連接到特定容器或圖像(python或Anaconda)?

當我創建一個項目,單擊純Python,然後添加遠程,然後單擊泊塢窗,我得到以下結果

enter image description here

我在Mac OS X埃爾卡皮坦運行(10.11.6)使用Docker版本1.12.1和Pycharm Pro 2016.2.3

+0

您是使用Docker for Mac,還是使用通過docker-machine設置的機器? – programmerq

+0

@programmerq目前Docker for Mac – kindjacket

+0

服務器是如何設置的?文檔[這裏](https://www.jetbrains.com/help/pycharm/2016.2/configuring-remote-interpreters-via-docker.html)提到了docker機器,這聽起來像你沒有使用。還有[此開放問題](https://youtrack.jetbrains.com/issue/IDEA-159223)支持Mac上的docker。還有[這種可能的解決方案](https://youtrack.jetbrains.com/issue/IDEA-153973#comment=27-1600630)。 – R0MANARMY

回答

4

Docker-for-mac僅支持通過OSX主機上偵聽的/var/run/docker.sock套接字進行連接。

如果您嘗試添加這pycharm,你會得到以下信息:

Only supported on Linux

「無法連接:java.lang.ExceptionInInitializerError,致:java.lang.IllegalStateException:只在Linux上支持「

所以PyCharm 確實只想通過TCP套接字連接到docker守護程序,並且支持對該套接字的推薦TLS保護。 「證書」文件夾默認爲默認泊塢窗機器的證書文件夾,「默認」。

如果您的OSX計算機上安裝了socat,則可以通過TCP服務器實施一種變通方法以顯示Docker for Mac。

brew install socat 

現在所安裝的,我可以用下面的參數socat運行:

socat TCP-LISTEN:2376,reuseaddr,fork,bind=127.0.0.1 UNIX-CLIENT:/var/run/docker.sock 

警告:這將有可能使

在我的系統,我把它通過自制軟件安裝任何進程作爲您的整個mac上的任何用戶運行,以訪問您的docker-for-mac。 unix套接字受用戶權限保護,而127.0.0.1則不受保護。

此socat命令告訴它在127.0.0.1:2376上偵聽並將連接傳遞到/var/run/docker.sock。 reuseaddr和fork選項允許這一個命令服務於多個連接,而不僅僅是第一個連接。

我可以測試socat通過運行以下命令工作:

docker -H tcp://127.0.0.1:2376 ps 

如果你得到一個成功的docker ps迴響應,那麼你知道socat過程做的工作。

現在,在PyCharm窗口中,我可以放置相同的tcp://127.0.0.1:2376。我應該得到一個「連接成功」的消息:

connection successful

此變通辦法將要求socat命令是運行要使用泊塢窗從PyCharm任何時候。

如果您想要做同樣的事情,但使用TLS,您可以設置證書並使其可用於pycharm和socat,並使用socat的OPENSSL-LISTEN而不是TCP-LISTEN功能。儘管如此,我不會詳細討論這個問題。

相關問題