如何从Docker运行PyCharm?

如何从Docker运行PyCharm?,docker,pycharm,Docker,Pycharm,我能够从保存Dockerfile的路径构建docker映像,该路径包含PyCharm的安装说明。在构建图像时,我能够查看创建的图像列表。然后我输入docker run ti-pycharm,这是我在终端中构建的图像的名称,我让我的容器运行。现在我被困在如何从这个容器中装载Pycharm?谢谢好的,我现在明白你的问题了。您需要能够运行主机没有依赖项的python脚本 另一方面,管理python依赖关系的常用方法是使用和。如果您不熟悉它,并且想要一种简单的方法来管理python依赖关系,那么您应该

我能够从保存Dockerfile的路径构建docker映像,该路径包含PyCharm的安装说明。在构建图像时,我能够查看创建的图像列表。然后我输入docker run ti-pycharm,这是我在终端中构建的图像的名称,我让我的容器运行。现在我被困在如何从这个容器中装载Pycharm?谢谢

好的,我现在明白你的问题了。您需要能够运行主机没有依赖项的python脚本


另一方面,管理python依赖关系的常用方法是使用和。如果您不熟悉它,并且想要一种简单的方法来管理python依赖关系,那么您应该阅读更多关于它的内容,因为这可能是最好的解决方案


使用Docker作为一种管理python依赖关系的方法也可以很好地工作,这是一种相对较新的实践,可能正在变得越来越普遍。在这种情况下,您不希望从Docker容器内部运行PyCharm。相反,您应该在主机上使用PyCharm进行开发,并使用容器简单地运行python脚本

最好的方式来说明这是如何工作的可能是一个例子。为了简单起见,创建一个新文件夹,将cd刻录到其中,然后创建一个简单的python脚本(
hello.py
):

现在,我们可以运行以下Docker命令:

$ docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:3 python hello.py
该命令将以/usr/src/myapp的形式将当前目录装载到容器中。当您对项目执行此操作时,它应该是您的项目目录。该命令将容器中的workdir设置为/usr/src/myapp,以便我们可以使用相对路径。只需将命令末尾的
hello.py
更改为要运行的脚本的相对路径


由于项目文件夹作为卷装入容器中,因此可以在主机上的PyCharm中编辑代码,并在容器中运行脚本。本例使用了默认的Python3容器,但将上述命令中的图像名称替换为您要使用的图像名称很简单,该名称可能已经安装了所需的依赖项。

在docker内部或外部运行IDE时存在几个问题

在主机上运行PyCharm时,在docker内部使用python解释器,共享代码库可以由

  • PyCharm的远程解释器功能

    • 通过SSH:
    • 通过Docker TCP端口:
    • 代码驻留在主机上,这是PyCharm提供静态分析所必需的

    • 无论何时您想要运行代码,它都需要与远程系统同步。我不确定同步是如何进行的,所以我不知道同步是双向的,还是主机上的PyCharm总是覆盖远程系统(docker容器)

  • 在docker容器内装载主机目录:

    • 当在Docker容器中装载Windows目录时,Windows上的Docker Desktop有很多限制。
      • linux容器无法更改Windows目录中文件的权限。这些文件似乎始终具有755(rwxr-xr-x)权限。如果您试图在linux容器中装载openssh配置或密钥,linux上的ssh将拒绝使用这些文件,因为它们不安全。
      • linux容器不会获取文件系统事件(inotify),让它知道从Windows装载的文件上的文件已更改。如果在开发中使用
        /manage.py runserver
        运行Django,它将需要轮询代码库中的所有文件以查看是否有任何更改。我还没有测试Django的投票结果。如果它不能足够快地工作,您可能必须重新启动Django,以便它反映您的更改。
      • 当主机是Mac时,这会更好,因为osxfs装载的卷在linux容器中工作得更好。
      • 在Windows上的linux容器中装载目录
      • 带有WinFSP的SSHFS允许Windows通过ssh装载文件。这需要在linux容器中安装ssh服务器。linux容器上的NFS或Samba服务器也可用于文件共享,但存在类似问题
      • Windows上的PyCharm不支持轮询文件更改。如果您通过ssh、NFS或SMB装载代码库,PyCharm将不知道您是否添加了新文件。如果切换到代码库的其他分支,这尤其是一个问题
  • 目前,我正在尝试在linux容器中运行PyCharm

    • 对于Docker Desktop for Windows,您不能使用JetBrains工具箱来安装PyCharm,因为它与需要支持fuse内核驱动程序的AppImage一起安装。docker似乎在这方面取得了进步,但我的Windows 10版本并不是Insider预览版的一部分,所以我还没有测试这些新功能。
    • 您只需安装pycharm tarball并运行它。您肯定需要在Docker Desktop的资源设置中增加内存和交换
    • 为了使linux容器能够显示gui应用程序,Windows需要运行诸如VcXsrv之类的xserver。启动后,可以设置env var
      DISPLAY=localhost:0
      。通过指定
      localhost
      而不仅仅是
      DISPLAY=:0
      ,您运行的任何gui应用程序都会知道它需要通过TCP连接到VcXsrv,而不是查找不存在的unix套接字
    • 通过在linux容器中运行PyCharm,我也不必考虑Git中的crlf转换设置
    PyCharm是一个IDE。虽然我认为可以从容器中运行GUI应用程序,但这不是一个典型的用例。为什么要在docker容器中运行PyCharm?老实说,我自己也不确定,我只是被要求尝试这种方法,因为我无法运行pytho
    $ docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:3 python hello.py