如何在我的docker容器中运行pycharm?

时间:2016-10-14 14:53:59

标签: python docker anaconda

我对码头工人来说很新。我想在docker容器中构建我的python应用程序。当我构建应用程序时,我想在Pycharm和我构建的容器中测试/运行它。

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

当我创建项目时,单击pure python然后添加远程,然后单击docker我得到以下结果

enter image description here

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

1 个答案:

答案 0 :(得分:6)

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回复,那么您就知道社交流程正在发挥作用。

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

connection successful

这种解决方法将要求socat命令在您想要使用PyCharm中的docker时运行。

如果你想做同样的事情,但是使用TLS,你可以设置证书并使它们可用于pycharm和socat,并使用socat的OPENSSL-LISTEN而不是TCP-LISTEN功能。虽然我没有详细说明这个答案。