質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.32%

docker runでrequirements.txtからpip installができない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,820

ruuusaamarki

score 452

前提・実現したいこと

djangoの開発環境を作るということで
Dodker仮想化環境構築入門という書籍を参考に進めています。良書!わかりやすいです!
その288ページからのdjango環境構築の部分で詰まってしまいました。
状況を端的にまとめますと
docker runでrequirements.txtからpip installができないということになります。

発生している問題・エラーメッセージ

$docker-compose run web django-admin.py startproject webpj .
Starting django_db_1 ... done
Building web
Step 1/7 : FROM python:3
 ---> c52c55ffbc6f
Step 2/7 : ENV PYTHONUNBUFFERED 1
 ---> Using cache
 ---> 6e797d3a1163
Step 3/7 : RUN mkdir /code
 ---> Using cache
 ---> 5ea6c8b0f2e7
Step 4/7 : WORKDIR /code
 ---> Using cache
 ---> 291d880a745e
Step 5/7 : COPY requirements.txt /code/
 ---> Using cache
 ---> cbf3968a39a8
Step 6/7 : RUN pip install -r requirements.txt
 ---> Running in 3f13d0039bab
/bin/sh: 1: pip: not found
ERROR: Service 'web' failed to build: The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 127
(base) example:~/study/docker/docker仮想環境構築入門/django $pip -V
pip 18.1 from /Users/example/study/Django/anaconda3/lib/python3.7/site-packages/pip (python 3.7)

該当のソースコード

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
Django==2.0
psycopg2
version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

試したこと

前述のソースにあるように pip自体はビルドコンテキスト上で認識されています。
またテスト用にディレクトリを作成し

pip install django

を実行したところこちらもインストールは成功しました。

気になっている点

◆1
書籍ではDockerfile,requirements.txt,docker-compose.ymlを作成した後
以下のコマンドを実行する流れになっております。
django-admin.py startproject webpj .

上記を実行すると当然ながら
not found django-admin.py
となります。

そこでdocker buildが必要なのかと思い実行してみたのですが
こちらもうまくいきませんでした。

◆2
Step 6/7 : RUN pip install -r requirements.txt
---> Running in 3f13d0039bab
/bin/sh: 1: pip: not found
ERROR: Service 'web' failed to build: The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 127
というエラーメッセージですがこれは macのshでpipを実行しようとして
pipが見つからないという意味でしょうか。

質問

エラーの原因、対処方法、調査すべきことなどご教授いただけましたら幸いです。
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

/bin/sh: 1: pip: not found

ということですので、pipコマンドが、 python:3イメージの中に入っていないと言われていますね。

pip install django

が成功したとのことですが、これはMac上の話でしょうか?

docker-compose run web

だけ実行してみていただきたいです。

それでもだめなら、
コンテナ作成時に、 pipをインストールする処理を追加してみてください。

RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
    python get-pip.py
RUN pip install -r requirements.txt

2のエラーについて

ERROR: Service 'web' failed to build: The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 127
というエラーメッセージですがこれは macのshでpipを実行しようとして
pipが見つからないという意味でしょうか。

いえ、これは、Dockerコンテナを作成する中で発生しているものなので、
FROM python:3のイメージの中の /bin/shとなります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/08 10:46

    tail12さんご回答ありがとうございます。

    pip install djangoはお察しの通りmac上で実行しました。
    説明不足ですみません。

    docker-compose run web
    を実行したところ同じようにnot foundが出てしまいましたので
    RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
    python get-pip.py
    を追記してみました。

    今度はcurlがnot foundとなってしまいました。

    何かおかしいなと考えていて
    ご回答いただいた以下の部分がヒントとなりました。
    FROM python:3のイメージの中の /bin/sh

    なんとなくよくわからんとなっていた部分がまさにこれで
    ホストPCで実行されているコマンドなのかdockerコンテナの中で実行されているかが
    ごっちゃになっていました。

    やはり原因はコンテナ内での実行失敗と思い
    検索をしているとdockerfileの1行目、pythonバージョンが違うものがあったので
    カンでFROM python:3.7としてみたところ動きが変わりました。

    pythonがそもそもpullできていなかったっぽいです。
    無事djangoの立ち上げまで完了することができました。

    情報提示漏れがあったにも関わらず的確なご指摘をいただけたことが
    解決につながりました!ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る