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

How do I run pycharm within my docker container?

我是 docker 的新手。我想在 docker 容器中构建我的 python 应用程序。当我构建应用程序时,我想在 Pycharm 和我构建的容器中测试/运行 它。

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

我在创建项目的时候,点击pure python然后添加remote,然后点击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,您将收到以下消息:

"Cannot connect: java.lang.ExceptionInInitializerError, caused by: java.lang.IllegalStateException: Only supported on Linux"

所以 PyCharm 真的 只想通过 TCP 套接字连接到 docker 守护进程,并且支持该套接字的推荐 TLS 保护. Certificates文件夹默认为默认docker-machine machine,"default".

的证书文件夹

如果您在 OSX machine 上安装了 socat,则可以通过 TCP 服务器为 Mac 公开 Docker。

在我的系统上,我通过自制软件安装了它:

brew install socat

安装完毕后,我可以 运行 使用以下参数进行 socat:

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

警告:这将使任何进程 运行ning 作为整个 mac 的任何用户访问您的 docker-for-mac 成为可能。 unix socket受用户权限保护,而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 window 中,我可以放置相同的 tcp://127.0.0.1:2376。我应该收到一条 "Connection successful" 消息:

此变通方法将要求 socat 命令在您想要使用 PyCharm.docker 的任何时候 运行ning。

如果你想做同样的事情,但使用 TLS,你可以设置证书并使它们可用于 pycharm 和 socat,并使用 socat 的 OPENSSL-LISTEN 而不是 TCP-LISTEN 特征。不过,我不会详细介绍这个答案。