我设置了卷绑定,将几个不同的路径映射到我的 Docker 容器。我在 Pycharm Pro 中设置了 Docker 插件,并将容器的解释器设置为我的 Python 解释器。我可以使用 docker 解释器部署我的 python 脚本,没有任何麻烦(就 docker 镜像上创建的包和依赖项而言)。
但是,在部署脚本并尝试通过卷绑定访问存储在本地计算机上的文件时,它找不到它们。当我在 pycharm 中打开交互式调试 shell 并运行 os.path.exist 时,它会对卷绑定的父路径(在容器内)返回 True,但对应该从本地计算机映射到那里的任何文件或目录返回 False。
这很奇怪,因为卷绑定处于活动状态,我已经通过多种方式验证了这一点:
我可以看到 Pycharm 的 Docker 工具窗口正确列出了绑定
从终端检查时,我可以看到映射文件出现在容器中。
我还可以在我的容器中打开一个终端并启动 python shell 并运行 os.path.exist,这也会返回 True,确认目录已被映射并位于我在卷绑定中指定的路径下。
为什么通过 Pycharm 的 Docker 解释器部署 python 脚本时无法访问我的卷绑定 - 即使脚本运行良好?
系统信息:
Pycharm版本:Pycharm Professional 2019.1.2
Docker 版本:2.0.0.3
本地机器操作系统:macOS 10.13.4 High Sierra
Docker 操作系统:Ubuntu 16.04
答案1
事实证明,当我部署脚本时,Pycharm 的 Docker 插件不会附加到现有的正在运行的容器(尽管它有一个 Docker 工具窗口,其中列出了正在运行的容器并显示它们的卷绑定,就好像这些容器用于部署一样,这有点误导)。相反,每次部署脚本时,它都会从映像启动一个新容器。因此,如果您想在每次启动脚本时将卷绑定到这些临时容器实例,则需要导航到运行/编辑配置并在“Docker 容器设置”下为每个脚本设置卷绑定。我不知道这是用于部署的卷绑定,而不是在正在运行的容器上的 Docker 工具窗口中设置的卷绑定。