【问题标题】:Installing a package in docker在 docker 中安装一个包
【发布时间】:2022-01-12 12:23:58
【问题描述】:

我在 django 项目中使用 docker,并安装了 req.txt 中的软件包。
在项目期间,我需要安装一个包,并使用 docker-compose exec web pip install 'package'docker-compose up -d --build 完成它,它安装在 docker 中,但我无法在我的项目中使用它,而我的项目中没有安装在项目中。
问题:

  • 如何在 docker 中安装包?
  • 是否可以使用 docker 将已安装的包写入 req.txt?

Dockerfile:

FROM python:3.8

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /code

COPY requirements.txt /code/
RUN pip install -r requirements.txt

COPY . /code/

docker-compose.yml:

version: '3.9'

services:
  web:
    build: .
    command: python /code/manage.py runserver 0.0.0.0:8000

    volumes:
      - .:/code

    ports:
      - 8000:8000
    depends_on:
      - db

  db:
    image: postgres:11
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - "POSTGRES_HOST_AUTH_METHOD=trust"

volumes:
  postgres_data:

【问题讨论】:

  • 这就是想法:您将@添加到requirements.txt并重建图像。

标签: python django docker docker-compose pip


【解决方案1】:

这是我在这里使用的标准工作流程。

首先,确保你有一个正常工作的非 Docker 开发环境。

python3 -m venv vpy
. vpy/bin/activate
pip install -e .

然后edit your setup.cfg file to include the new package 并更新虚拟环境。

$EDITOR setup.cfg
# add install_requires= package
pip install -e .

确保您的应用程序正常运行。

pytest
run_the_app  # calling a setuptools console_scripts= script

更新包锁文件。

pip freeze > requirements.txt

到目前为止,所有这些仍然在您的主机上,在 Docker 之外。现在您可以重建映像以运行集成测试:

docker-compose build
docker-compose up -d
curl http://localhost:8000

请注意,此设置是完全正常的 Python 依赖工作流,最后还有一个“构建您的 Docker 映像”。其中没有任何 Docker 特定的内容,并且您不会“在 Docker 中安装依赖项”或“从已部署的映像更新主机源代码”。您可以使用 Pipenv 等较新的工具而不是普通的虚拟环境来做类似的事情。

(您不需要 Compose volumes: 块来隐藏图像中的代码,也不需要 Compose command: 行来覆盖 Dockerfile 的 CMD。)

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2015-07-04
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多