python - 使用docker时导入自定义python模块文件失败

标签 python docker

我有两个python文件a.pyb.py,dir结构是这样的:

  • 文件(目录)

    • 主要(目录)
      • a.py
      • Dockerfile
    • b.py

a.py中,有一些这样的代码:

import sys
sys.path.append('..')
import b

我可以通过命令行很好地运行它。但用docker运行失败。以下是构建和运行 docker 镜像的代码:

Dockerfile:

FROM python:3.6
ADD a.py /.
WORKDIR /.
ENV PYTHONPATH /files/
CMD [ "python3", "a.py" ]

构建镜像的命令:

# cd /files/main
# docker build -t a:1.0 .

镜像构建成功以及运行镜像的命令:

# docker run --name a a:1.0

它给了我:

Traceback (most recent call last):   
 File "a.py", line 3, in <module>
   import b
ModuleNotFoundError: No module named 'b'

我的问题是,在这个例子中,我如何以正确的方式构建和运行图像?

最佳答案

更改您的 Dockerfile 以复制 a.py & b.py -

FROM python:3.6
ENV PYTHONPATH /files/
WORKDIR /app
COPY main/a.py b.py ./
CMD [ "python3", "a.py" ]

运行docker build从主目录外部 -

$ docker build -f main/Dockerfile -t a:1.0 .
$ docker run --name a a:1.0

尝试一下!

关于python - 使用docker时导入自定义python模块文件失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55808161/

相关文章:

linux - 如何在 mosquitto Docker 容器中编辑 mosquitto.conf?

docker - 如何在多个私有(private)注册表中搜索 docker 镜像

docker - 我在 `docker ps` 中看到一些未知容器

python - 如何在请求结束时调用 generic.view 中的自定义方法

python - 什么是自适应平均池以及它是如何工作的?

docker - 使用 "publish"时,有办法从容器访问 "fig run"端口吗?

docker - 客户端容器用于测试容器中的服务

python - 从 csv 读取解析时修改日期时间格式 - pandas

python - 你可以用 Lisp 宏做什么,而一流的函数却做不到?

python - Python-初学者问题