python - 在 Dockerfile 上运行安装 python 包
问题描述
我是 Docker 新手,目前正在尝试通过安装 python 包及其库来创建 Dockerfile,如下所示:
FROM balenalib/fincm3-debian-python:latest
# RUN install_packages git
RUN apt-get update && apt-get install python \
&& apt-get install pip3 \
apt-get install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev \
pip3 install pyaudio \
pip3 install numpy \
pip3 install matplotlib \
pip3 install scipy \
pip3 install librosa \
# Set our working directory
WORKDIR /usr/src/app
COPY Recorder.py /usr/src/app
# Recorder.py will run when container starts up on the device
CMD ["python","/usr/src/app/Recorder.py"]
但是,当我尝试推送此 Dockerfile 时,会生成错误
Error: The command '/bin/sh -c apt-get update && apt-get install python && apt-get install pip3 apt-get install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev pip3 install pyaudio
pip3 install numpy pip3 install matplotlib pip3 install scipy pip3 install librosa WORKDIR /usr/src/app' returned a non-zero code: 100
解决方案
我相信你在这个 Dockerfile 中的问题不止一个,当你把所有命令放在一起时&& and \
,你不知道是哪一个触发了错误。我建议将它们拆分用于调试目的,当它们都工作时,您可以将它们放在一起。一旦您了解了每个单独的错误,就更容易检查和解决它们。这个问题有很有价值的信息:how to install pip in docker
尝试这个:
1- 包是触发 Y/n 问题,给 -y 以保证它通过
2-使用反斜杠表示新命令,你应该使用&&,反斜杠是指断行,你可以使用\然后&&
3-pip3
和libportaudio0
包不存在。
E: Unable to locate package libportaudio0
我发现了像这样划分 Dockerfile 并删除提到的问题的错误:
RUN apt-get update
RUN apt-get install python -y\
&& apt-get install python3-pip -y
RUN apt-get install libportaudio2 libportaudiocpp0 portaudio19-dev -y
RUN pip3 install pyaudio numpy matplotlib \
scipy librosa
如果要将命令放在一起:
RUN apt-get update \
&& apt-get install python -y \
&& apt-get install python3-pip -y \
&& apt-get install libportaudio2 libportaudiocpp0 portaudio19-dev -y \
&& pip3 install pyaudio numpy matplotlib \
scipy librosa
我还建议添加一个 pip 要求文件,这会使事情变得更干净。
推荐阅读
- c - WinAPI - CreateProcessW fails when C:\Program file exists
- python - tensorflow TFRecordWriter 杀内核
- cloud - 具有身份的 Google Flex 应用网站
- python - 使用 Numpy 将 DataFrame 拆分为数组
- algorithm - 生成对称排列
- python - 加载泡菜时,出现导入错误,“没有名为 sip 的模块”
- swagger - nswag 生成破坏 URL 的代理
- java - setFocusTraversalKeysEnabled() 有什么用?
- android - 将参数传递给 SQLite 查询
- solr - 如何配置 solr 以确保单词位置