使用docker时无法导入自定义的python模块文件

时间:2019-04-23 09:28:42

标签: python docker

我有两个python文件a.pyb.py,目录结构如下:

  • 文件(目录)

    • main(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'

我的问题是,给出此示例,我如何才能以正确的方式构建和运行映像?

2 个答案:

答案 0 :(得分:1)

更改Dockerfile以同时复制a.pyb.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

尝试一下!

答案 1 :(得分:0)

您需要将b.py放入Docker上下文中并将其复制到容器中。 如果您想进一步了解build context,可以查看官方文档。