python - ModuleNotFoundError 仅在 Docker 中启动应用程序时发生
问题描述
我目前正在试验饼干切割机。我正在为 Django 创建一个模板,它正在工作。下一步是为其添加一个 docker 容器。出于某种原因,当我运行 docker-compose up 时出现以下错误(或者只是从容器内手动启动 django 应用程序):
app_1 | Exception in thread django-main-thread:
app_1 | Traceback (most recent call last):
app_1 | File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
app_1 | self.run()
app_1 | File "/usr/local/lib/python3.8/threading.py", line 870, in run
app_1 | self._target(*self._args, **self._kwargs)
app_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/autoreload.py", line 53, in wrapper
app_1 | fn(*args, **kwargs)
app_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 110, in inner_run
app_1 | autoreload.raise_last_exception()
app_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/autoreload.py", line 76, in raise_last_exception
app_1 | raise _exception[1]
app_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 357, in execute
app_1 | autoreload.check_errors(django.setup)()
app_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/autoreload.py", line 53, in wrapper
app_1 | fn(*args, **kwargs)
app_1 | File "/usr/local/lib/python3.8/site-packages/django/__init__.py", line 24, in setup
app_1 | apps.populate(settings.INSTALLED_APPS)
app_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 91, in populate
app_1 | app_config = AppConfig.create(entry)
app_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/config.py", line 90, in create
app_1 | module = import_module(entry)
app_1 | File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
app_1 | return _bootstrap._gcd_import(name[level:], package, level)
app_1 | File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
app_1 | File "<frozen importlib._bootstrap>", line 991, in _find_and_load
app_1 | File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
app_1 | ModuleNotFoundError: No module named 'd'
当我手动运行 django 应用程序时,一切正常。我还将添加我的 Dockerfile 和我的 docker-compose.yaml:
FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED=1 \
APP_ROOT=/var/app
# Install waitfor
ENV WAITFOR_VERSION="v2.1.1"
RUN set -x \
&& BUILD_PACKAGES=' \
curl \
' \
&& RUNTIME_PACKAGES=' \
gosu \
netcat \
' \
&& apt-get update \
&& apt-get install -y ${BUILD_PACKAGES} ${RUNTIME_PACKAGES} \
&& curl -o /usr/local/bin/wait-for -sSL https://raw.githubusercontent.com/eficode/wait-for/${WAITFOR_VERSION}/wait-for \
&& chmod +x /usr/local/bin/wait-for \
&& apt-get purge -y --auto-remove ${BUILD_PACKAGES} \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt ${APP_ROOT}/requirements.txt
RUN set -ex \
&& BUILD_PACKAGES='\
build-essential \
git-core \
liblzma-dev \
graphviz-dev\
' \
&& RUNTIME_PACKAGES=' \
postgresql-client \
postgresql-contrib \
graphviz \
lzma \
' \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
${BUILD_PACKAGES} ${RUNTIME_PACKAGES} \
&& pip install --no-cache-dir -r ${APP_ROOT}/requirements.txt \
&& apt-get remove -y ${BUILD_PACKAGES} \
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
&& rm -rf /var/lib/apt/lists/* \
\
&& find /usr/local -depth \
\( \
\( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \
\) -exec rm -rf '{}' +
# COPY docker-dev-entrypoint.sh /usr/local/bin/default-entrypoint.sh
# ENTRYPOINT ["/usr/local/bin/default-entrypoint.sh"]
COPY ./ ${APP_ROOT}
WORKDIR ${APP_ROOT}
version: '3.9'
services:
db:
image: postgis/postgis:12-master
container_name: "my_demo_app_db"
ports:
- "5432"
environment:
- POSTGRES_PASSWORD=dev
- POSTGRES_DB=my_demo_app
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U postgres" ]
interval: 10s
timeout: 5s
retries: 5
volumes:
- db_data:/var/lib/postgresql/data
app:
build:
dockerfile: Dockerfile
context: .
ports:
- "8000:8000"
volumes:
- ./:/var/app
- /tmp:/tmp
command: python manage.py runserver 0.0.0.0:8000
env_file:
- docker.env
depends_on:
- db
volumes:
db_data:
有谁知道错误来自哪里和/或如何解决它?
提前致谢!
解决方案
推荐阅读
- google-sheets - 如何创建一个公式来对一列中的值求和,但将这些值乘以另一列?
- c# - 如何将此解密合并到我的代码中,将散列密码转换回原始密码
- swift - 界面生成器中具有动态类型的自定义字体
- excel - for循环中的条件语句
- ruby-on-rails - Rails 5:如何设置合并工具以用于 rails app:update?
- xamarin - 使用 BindableLayout.ItemsSource 在 StackLayout 中进行命令绑定(使用 RelativeSourceExtension)
- sql-server - 无法从继承的工作 PC 卸载 SQL Server 2017
- python - 在生成文档术语矩阵之前或之后拆分为测试和训练集?
- wpf - RequestNavigate in MainWindowViewModel ctor
- azure-devops - 从 azure devops 中的包中读取发布版本