【发布时间】:2020-11-10 21:26:33
【问题描述】:
我有一个使用 Python 和 Docker 实现的功能。
当我运行docker-compose up -d 时,我能够成功构建映像,并且整个文件夹也被复制到 Docker 容器中,并且我能够在容器中看到复制的文件。
但是,在运行 Python 文件时,我收到了错误
ModuleNotFoundError: No module named "bank_transactions"
在 main_transactions.py 文件中,我已经导入了常量文件,我在下面的屏幕截图中显示了文件夹结构。
当我通过 PyCharm 运行应用程序时,它运行良好,没有任何问题。
以下是 Docker 文件配置。
docker-compose.yml
version: "3.6"
services:
app :
build: .
db:
image: postgres
restart: always
environment:
POSTGRES_USERNAME: root
POSTGRES_PASSWORD: root
POSTGRES_DB: testdb
ports:
- 5432:5432
Dockerfile
FROM python:3.6
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY . /code/
RUN pip install -r requirements.txt
CMD [ "python", "/Transactions/bank_transactions/main_transactions.py" ]
错误日志:
Traceback (most recent call last):
app6_1 | File "/code/bank_transactions/main_transactions.py", line 5, in <module>
app6_1 | from bank_transactions import constants
app6_1 | ModuleNotFoundError: No module named 'bank_transactions'
【问题讨论】:
-
第一条评论:
RUN mkdir /code这行是不需要的,你可以删除它(因为WORKDIR /code可以被看作是bash命令“mkdir -p /code && cd /code”的Dockerfile等价物) -
那么,问题可能来自路径问题:如果你这样做
WORKDIR /code和COPY . /code,和 bank_transactions 在 docker 上下文的根文件夹中(大致,包含 Dockerfile 的文件夹),那么您可以尝试CMD ["python", "/code/back_transactions/main_transactions.py"]? -
感谢您的回复,我已经删除了 "RUN mkdir /code" 并添加了 CMD ["python", "/code/back_transactions/main_transactions.py"] ,并建立了新的图像和运行它,我得到与 ModuleNotFoundError 相同的错误:没有名为“bank_transactions”的模块
-
好的(顺便说一句,我的评论中有错字,我写了“back_”......)但我想你应该在你的问题中添加更多细节,也许是@987654333 输出的一部分@?
标签: python-3.x docker dockerfile