【问题标题】:There is no python-dotenv library installed by DockerfileDockerfile 没有安装 python-dotenv 库
【发布时间】:2020-11-01 11:12:56
【问题描述】:

我的 Dockerfile:

FROM python:3.9

WORKDIR /usr/src/app

RUN pip install python-dotenv
RUN pip install other_libraries...

在构建容器期间,显示消息:

...
Step 3/4 : RUN pip install python-dotenv
---> Running in 5fffd3fe4042
Collecting python-dotenv
Downloading python_dotenv-0.15.0-py2.py3-none-any.whl (18 kB)
Installing collected packages: python-dotenv
Successfully installed python-dotenv-0.15.0
Removing intermediate container 5fffd3fe4042
---> 2cd0942f520c
...

但是当我运行docker-compose exec container_name pip list 时,列表中没有python-dotenv 库。

我在 0.14 或 0.15 版本中尝试使用 python:3.9python:3.8python-dotenv

当然,当我运行docker-compose exec container_name pip install python-dotenv 时,一切正常。

为什么 Dockerfile 中的RUN 命令没有正确安装?

【问题讨论】:

  • 据我所知,Dockerfile 用于构建映像,而不是容器。构建镜像后,您需要使用构建的镜像运行容器。为什么你使用 docker-compose?你有一些 yaml 配置吗?
  • 我刚刚构建并运行了您的映像,pip list 向我展示了 4 个包,其中一个是 python-dotenv 0.15.0。如果我启动 Python,则执行 from dotenv import load_dotenv; load_dotenv() 可以工作并打印 True。 - 我不使用 docker-compose,所以如果您甚至没有正确运行或查看容器,我不知道如何为您提供帮助。 - 简而言之......我认为你的 Dockerfile 很好。
  • 好的,我的 docker-compose 使用了旧服务。
  • 如果您还显示了 docker-compose YAML 文件会有所帮助。也许您开始使用 docker-compose 的容器不是来自您使用 python-dotenv 构建的同一图像。正如其他人所提到的,您的 Dockerfile RUN 命令应该没问题。

标签: python docker docker-compose dotenv


【解决方案1】:

我不使用 docker-compose,但是由于您的标题说您的 Dockerfile 无法正常工作,我可以告诉您这显然不是问题所在。您的 Dockerfile 似乎工作正常:

>>> cat Dockerfile
FROM python:3.9
WORKDIR /usr/src/app
RUN pip install python-dotenv

>>> docker build -t so2 .
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM python:3.9
3.9: Pulling from library/python
e4c3d3e4f7b0: Pull complete
101c41d0463b: Pull complete
8275efcd805f: Pull complete
751620502a7a: Pull complete
0a5e725150a2: Pull complete
397dba5694db: Pull complete
b1d09d0eabcb: Pull complete
475299e7c7f3: Pull complete
d2fe14d8e6bc: Pull complete
Digest: sha256:429b2fd1f6657e4176d81815dc9e66477d74f8cbf986883c024c9b97f7d4d5a6
Status: Downloaded newer image for python:3.9
 ---> 5336a27a9b1f
Step 2/3 : WORKDIR /usr/src/app
 ---> Running in 37b03142a9b6
Removing intermediate container 37b03142a9b6
 ---> 4677ab34ce84
Step 3/3 : RUN pip install python-dotenv
 ---> Running in e89d17be1a32
Collecting python-dotenv
  Downloading python_dotenv-0.15.0-py2.py3-none-any.whl (18 kB)
Installing collected packages: python-dotenv
Successfully installed python-dotenv-0.15.0
Removing intermediate container e89d17be1a32
 ---> 55d00eeae4b4
Successfully built 55d00eeae4b4
Successfully tagged so2:latest

>>> docker run -it so2 bash
root@d211989c4bd7:/usr/src/app# pip list
Package       Version
------------- -------
pip           20.2.4
python-dotenv 0.15.0
setuptools    50.3.2
wheel         0.35.1
root@d211989c4bd7:/usr/src/app# exit

>>> docker run -it so2
Python 3.9.0 (default, Oct 13 2020, 20:14:06)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from dotenv import load_dotenv; load_dotenv()
True
>>>

>>> 代表我在 MacBook pro 终端窗口中的提示。

【讨论】:

    【解决方案2】:

    一步一步来。

    1. 构建包含 python 库的映像(使用您的 Dockerfile)
    docker build -t dotenv_image:1.0 .
    
    1. 列出图片
    docker images
    
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    dotenv_image              1.0                 507f2d0505a0        4 minutes ago       891MB
    

    ↑好的,就在这里

    1. 使用sh shell 运行容器,以便能够运行命令并检查容器内的内容
    docker run --rm -it --entrypoint sh dotenv_image:1.0
    
    1. 检查库
    pip freeze
    
    python-dotenv==0.15.0
    

    图书馆在这里

    1. 尝试使用库
    python -c 'from dotenv import load_dotenv; print("ALL OK" if load_dotenv() else "CAN NOT LOAD")';
    
    ALL OK
    

    ↑正输出

    【讨论】:

    • 直到我发布了我的答案才看到这个答案。我会删除我的。您可以做的一件事是我做的...还表明,如果您启动 Python,您可以在 Python 提示符下运行 from dotenv import load_dotenv; load_dotenv() 并获得预期的 True 作为输出。
    • @Steve 感谢您的检查。添加了 load_dotenv 的输出。你的回答也正确。没有理由删除它。
    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2019-09-12
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多