我有两个python文件a.py
和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'
我的问题是,给出此示例,我如何才能以正确的方式构建和运行映像?
答案 0 :(得分:1)
更改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
尝试一下!
答案 1 :(得分:0)
您需要将b.py
放入Docker上下文中并将其复制到容器中。
如果您想进一步了解build context,可以查看官方文档。