如何在我的docker集装箱内运行pycharm?

docker工人我很新。 我想在Docker容器中构build我的python应用程序。 在构build应用程序时,我想要在Pycharm和我创build的容器中进行testing/运行。

如何将Pycharm pro连接到特定的容器或图像(python或Anaconda)?

当我创build一个项目,点击纯Python,然后添加远程,然后单击docker我得到以下结果

在这里输入图像说明

我在Mac OS X El Capitan(10.11.6)上运行Docker版本1.12.1和Pycharm Pro 2016.2.3

Docker-for-mac只支持在OSX主机上侦听的/var/run/docker.sock套接字连接。

如果您尝试将其添加到pycharm,您将收到以下消息:

只在Linux上支持

“无法连接:java.lang.ExceptionInInitializerError,由:java.lang.IllegalStateException引起:仅在Linux上受支持”

所以PyCharm 实际上只想通过TCP套接字连接到docker守护进程,并且支持对该套接字的推荐TLS保护。 “证书”文件夹默认为默认docker机器的证书文件夹“default”。

如果在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选项允许这一个命令服务于多个连接,而不是第一个连接。

我可以通过运行以下命令来testingsocat正在工作:

 docker -H tcp://127.0.0.1:2376 ps 

如果你得到了一个成功的docker ps回应,那么你知道socat进程正在做它的工作。

现在,在PyCharm窗口中,我可以放置相同的tcp://127.0.0.1:2376 。 我应该得到一个“连接成功”的消息:

连接成功

这个解决方法需要socat命令在你想使用PyCharm的docker时运行。

如果你想做同样的事情,但是使用TLS,你可以设置证书并使它们可用于pycharm和socat,并且使用socat的OPENSSL-LISTEN而不是TCP-LISTEN特性。 尽pipe如此,我不会详细讨论这个问题。