我正在try 在一个停靠的minconda环境中运行一个python脚本.我面临的问题是,当我docker run
交互(-it)并在内部手动运行脚本时,它工作得很好.但是当以非交互方式I docker run
时,找不到与minconda安装一起提供的模块,如cryptography
、lxml
.
我的docker文件:
ARG REGISTRY=harbor-west.reg.com/ci
ARG FROM_TAG=master
FROM harbor-west.reg.com/base-os/ubuntu:20.04
USER root
ENV CONDA_DIR $HOME/miniconda3
RUN apt update && \
DEBIAN_FRONTEND=noninteractive apt install -y \
python3 \
python3-pip \
wget
RUN pip install --upgrade \
google-api-python-client \
grpcio \
matplotlib \
numpy \
opencv-python \
pandas \
scikit-learn
RUN mkdir /abc
#Download a conda package under /abc/bin - steps removed for simplicity
#install miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-x86_64.sh
RUN chmod 755 Miniconda3-py38_23.3.1-0-Linux-x86_64.sh
RUN /bin/bash -c "./Miniconda3-py38_23.3.1-0-Linux-x86_64.sh -b"
ENV PATH=$CONDA_DIR/bin:$PATH
RUN /root/miniconda3/condabin/conda init
WORKDIR /abc/bin
CMD ["/bin/bash", "-c", "/abc/bin/start-prediction.sh"]
#ENTRYPOINT ["/abc/bin/start-prediction.sh"]
非交互式停靠运行的输出(意外):
Traceback (most recent call last):
File "prediction_server.py", line 2, in <module>
from abc.learn import prepare_data, SuperResolution
File "/abc/bin/abc/__init__.py", line 3, in <module>
from abc.auth.tools import LazyLoader
File "/abc/bin/abc/auth/__init__.py", line 1, in <module>
from .api import RegSession
File "/abc/bin/abc/auth/api.py", line 30, in <module>
from ._auth import (
File "/abc/bin/abc/auth/_auth/__init__.py", line 2, in <module>
from ._pki import PKIAuth
File "/abc/bin/abc/auth/_auth/_pki.py", line 4, in <module>
from ..tools._lazy import LazyLoader
File "/abc/bin/abc/auth/tools/__init__.py", line 1, in <module>
from .certificate import pfx_to_pem
File "/abc/bin/abc/auth/tools/certificate.py", line 6, in <module>
import cryptography
ModuleNotFoundError: No module named 'cryptography'
交互式坞站运行的输出(如预期):
(base)root@dcc788e0a8c5:/abc/bin# ./start-prediction.sh
server listening on 0.0.0.0:50443
我试着 echo 容器内部的路径,看起来没问题:
/root/miniconda3/bin:/root/miniconda3/condabin:/miniconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
我不知道我错过了什么.我认为,如果它以交互方式工作,那么它也应该以非交互方式工作.如有任何建议,我们将不胜感激.