0

私のプロジェクトでは、ubuntuに基づいたドッキングされたマイクロサービスがあります。信頼できるpython 2.7.13を標準のapt-get 2.7.6から更新したいバージョン。その際、モジュールのインポートに関するいくつかの問題が発生しました。それ以来、私はpythonpath python2.7/dist-packagesの先頭に追加しました。これには、私が関係しているすべてのモジュールが含まれています。docker-composeのPythonと同じ画像の独立したコンテナの不一致

私はdocker-compose buildを使用して、私のmicroservice像を建てたが、ここで問題です:私はdocker-compose upを実行すると、このmicroserviceは、すべての非標準モジュールをインポートするには失敗し、まだ私は実行し、その後、その後docker run -it image_id /bin/bashを使用して同じ画像から自分のコンテナを作成したときにPythonのシェルと上記のモジュールのいずれかをインポートすると、すべてが完璧に動作します。同じPythonスクリプトを実行しても、これらのインポートステートメントをすべて過ぎてしまいます(ただし、適切なリンクがないと分離して実行されるため、他の問題では失敗します)。

Python 2.7.13がdocker-compose upで実行されていると主張し、私自身のコンテナを実行すると主張しました。私はすべてのコンテナ、画像、キャッシュをクリアし、進歩なしに再構築しました。ドッカーファイルの最後に実行されるコマンドはCMD python /filename/file.pyです。

このような不一致を引き起こす原因は何ですか?

編集: リクエストに応じて、ここにDockerfileがあります。ファイル構造はサブフォルダを持つ単なるプロジェクトフォルダで、それぞれが独自のドッキングされたマイクロサービスです。ここで問題となるのはdocument_analyzerと呼ばれ、以下はdocker-composeファイルの関連セクションです。適切にインストールされていないファイルの例は、PyPDF2、pymongo、boto3です。

FROM ubuntu:trusty 

# Built using PyImageSearch guide: 
# http://www.pyimagesearch.com/2015/06/22/install-opencv-3-0-and-python-2-7-on-ubuntu/ 

# Install dependencies 
RUN \ 
    apt-get -qq update && apt-get -qq upgrade -y && \ 
    apt-get -qq install -y \ 
     wget \ 
     unzip \ 
     libtbb2 \ 
     libtbb-dev && \ 
    apt-get -qq install -y \ 
     build-essential \ 
     cmake \ 
     git \ 
     pkg-config \ 
     libjpeg8-dev \ 
     libtiff4-dev \ 
     libjasper-dev \ 
     libpng12-dev \ 
     libgtk2.0-dev \ 
     libavcodec-dev \ 
     libavformat-dev \ 
     libswscale-dev \ 
     libv4l-dev \ 
     libatlas-base-dev \ 
     gfortran \ 
     libhdf5-dev \ 
     libreadline-gplv2-dev \ 
     libncursesw5-dev \ 
     libssl-dev \ 
     libsqlite3-dev \ 
     tk-dev \ 
     libgdbm-dev \ 
     libc6-dev \ 
     libbz2-dev \ 
     libxml2-dev \ 
     libxslt-dev && \ 

    wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz && \ 
    tar -xvf Python-2.7.13.tgz && \ 
    cd Python-2.7.13 && \ 
    ./configure && \ 
    make && \ 
    make install && \ 
    apt-get install -y python-dev python-setuptools && \ 
    easy_install pip && \ 
    pip install numpy==1.12.0 && \ 

    apt-get autoclean && apt-get clean && \ 

    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 


# Download OpenCV 3.2.0 and install 
# step 10 
RUN \ 
    cd ~ && \ 
    wget https://github.com/Itseez/opencv/archive/3.2.0.zip && \ 
    unzip 3.2.0.zip && \ 
    mv ~/opencv-3.2.0/ ~/opencv/ && \ 
    rm -rf ~/3.2.0.zip && \ 

    cd ~ && \ 
    wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip -O 3.2.0-contrib.zip && \ 
    unzip 3.2.0-contrib.zip && \ 
    mv opencv_contrib-3.2.0 opencv_contrib && \ 
    rm -rf ~/3.2.0-contrib.zip && \ 

    cd /root/opencv && \ 
    mkdir build && \ 
    cd build && \ 
    cmake -D CMAKE_BUILD_TYPE=RELEASE \ 
     -D CMAKE_INSTALL_PREFIX=/usr/local \ 
     -D INSTALL_C_EXAMPLES=OFF \ 
     -D INSTALL_PYTHON_EXAMPLES=ON \ 
     -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ 
     -D BUILD_EXAMPLES=ON .. && \ 

    cd ~/opencv/build && \ 
    make -j $(nproc) && \ 
    make install && \ 
    ldconfig && \ 

    # clean opencv repos 
    rm -rf ~/opencv/build && \ 
    rm -rf ~/opencv/3rdparty && \ 
    rm -rf ~/opencv/doc && \ 
    rm -rf ~/opencv/include && \ 
    rm -rf ~/opencv/platforms && \ 
    rm -rf ~/opencv/modules && \ 
    rm -rf ~/opencv_contrib/build && \ 
    rm -rf ~/opencv_contrib/doc 



RUN mkdir ~/.aws/ && touch ~/.aws/config && touch ~/.aws/credentials && \ 
    echo "[default]" > ~/.aws/credentials && \ 
    echo "AWS_ACCESS_KEY_ID=xxxxxxx" >> ~/.aws/credentials && \ 
    echo "AWS_SECRET_ACCESS_KEY=xxxxxxx" >> ~/.aws/credentials && \ 

    echo "[default]" > ~/.aws/config && \ 
    echo "output = json" >> ~/.aws/config && \ 
    echo "region = us-east-1" >> ~/.aws/config 

RUN apt-get update && \ 
    apt-get -y install bcrypt \ 
           libssl-dev \ 
           libffi-dev \ 
           libpq-dev \ 
           vim \ 
           redis-server \ 
           rsyslog \ 
           imagemagick \ 
           libmagickcore-dev \ 
           libmagickwand-dev \ 
           libmagic-dev \ 
           curl 

RUN pip install pyopenssl ndg-httpsclient pyasn1 

WORKDIR /document_analyzer 

# Add requirements and install 
COPY . /document_analyzer 

RUN pip install -r /document_analyzer/requirements.txt && \ 
    pip install -Iv https://pypi.python.org/packages/f5/1f/2d7579a6d8409a61b6b8e84ed02ca9efae8b51fd6228e24be88588fac255/tika-1.14.1.tar.gz#md5=aa7d77a4215e252f60243d423946de8d && \ 
    pip install awscli 
ENV PYTHONPATH="/usr/local/lib/python2.7/dist-packages/:${PYTHONPATH}" 

CMD python /document_analyzer/api.py 

ドッカー-コン:

document_analyzer: 
    environment: 
     - IP=${IP} 
    extends: 
     file: common.yml 
     service: microservice 
    build: document_analyzer 
    ports: 
     - "5001:5001" 
    volumes: 
     - ./document_analyzer:/document_analyzer 
     - .:/var/lib/ 
    environment: 
     - PYTHONPATH=$PYTHONPATH:/var/lib 
    links: 
     - redis 
     - rabbit 
     - ocr_runner 
     - tika 
     - document_envelope 
     - converter 
    restart: on-failure 
+1

投稿ファイル、実行しているコマンドのリスト、フォルダ構造など...デバッグに役立つもの。 – johnharris85

+0

AWSの資格情報をすぐに変更して、Dockerファイルが平文になっているので削除することがあります –

+0

@ cricket_007これを指摘して編集していただきありがとうございます。幸運にも実際のダメージはありませんが、置き換えられました – lf16

答えて

1

あなたは、この作業は、ビルド・フェーズ中に行われています

WORKDIR /document_analyzer 

# Add requirements and install 
COPY . /document_analyzer 

RUN pip install -r /document_analyzer/requirements.txt && \ 
    pip install -Iv https://pypi.python.org/packages/f5/1f/2d7579a6d8409a61b6b8e84ed02ca9efae8b51fd6228e24be88588fac255/tika-1.14.1.tar.gz#md5=aa7d77a4215e252f60243d423946de8d && \ 
    pip install awscli 

また、実行時には、あなたがコンYAMLファイルに次の操作を行います。

volumes: 
    - ./document_analyzer:/document_analyzer 

そのボリュームマウントは、ビルド中に/document_analyzerで行ったすべての設定を上書きします。コンテナの外のディレクトリにあるものだけが、コンテナ内の/document_analyzerにあります。以前の/document_analyzerにあったものは、ビルド段階から、このマウントによって隠され、利用できません。

docker runを使用するときの違いは、このマウントを作成しなかったことです。

関連する問題