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

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

ただいまの
回答率

88.33%

dockerでrequrements.txtからpip installできない(Hashエラー)

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,299

simasimaa

score 41

https://sinyblog.com/docker/django-docker-001/#Dockerfileを参考にしてDocker環境でDjangoを作成しようとしたのですが
dockerでdocker-compose でpipコマンドを走らせてHash系のエラーが出ます。

ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
    Django==3.0.2 from https://files.pythonhosted.org/packages/55/d1/8ade70e65fa157e1903fe4078305ca53b6819ab212d9fbbe5755afc8ea2e/Django-3.0.2-py3-none-any.whl#sha256=4f2c913303be4f874015993420bf0bd8fd2097a9c88e6b49c6a92f9bdd3fb13a (from -r requirements.txt (line 1)):
        Expected sha256 4f2c913303be4f874015993420bf0bd8fd2097a9c88e6b49c6a92f9bdd3fb13a
             Got        6aba4ad691e29fadb6d5367e4c331bd4aee1d824fb4f005c3b8d3d9b055e8ad4

 

構成としてはプロジェクトのディレクトリ配下に以下のファイルを置いています。
Dokerfile

FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install pip==19.1.1 --no-cache-dir
RUN pip install -r requirements.txt --no-cache-dir


requirements.txt

Django==3.0.2
psycopg2


docker-compose.yml

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 


そしてdocker-compose up build
で実行すると上記エラーが発生します

DockerFileの--no-cache-dirはこのエラーはキャッシュから取得しているため発生するとの情報を得てつけていますが、これでも同じエラーが出ます。
https://stackoverflow.com/questions/61551480/clean-docker-pip-install-results-in-error-these-packages-do-not-match-the-hashe
によりpipのversionの問題らしくpipのversionを変更するようにしていますが、それでも同じエラーが出ています。

この解決策はありますか?

https://qiita.com/reflet/items/4b3f91661a54ec70a7dc
を参考にしてdockerでpythonを実行し、内部でpip install package名 を実行したところ同じHashのエラーが起こりました。
docker-toolboxでpythonのpipは実行できないのでしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • bsdfan

    2020/06/15 10:42

    python:3.6のイメージが古くなっているとかはないでしょうか?
    docker pull python:3.6
    で更新したら改善したりしませんか。

    キャンセル

  • yymmt

    2020/06/30 01:52

    参考までに先ほどダウンロードしたばかりのpython:3.6でpip==20.1.1で特に問題は発生していません。

    キャンセル

  • simasimaa

    2020/07/24 18:16

    別のPCでDocker ForWindowsで行ったらエラーは発生しませんでした。

    キャンセル

回答 1

0

追記

少なくともコンテナには原因がなさそうで、
環境依存であることが明確になりつつあります

コンテナがリクエストしている Django のハッシュ

こちらは問題なさそうです

現在 Docker コンテナがリクエストしている Django のハッシュは
PyPI 上のハッシュと一致しています:

Django · PyPI

ハッシュが一致していることの確認

他に考えられる原因

まだなんとも言えませんが、次の点が気になります:

ネットワーク:

  • DNS が違う宛先を返している可能性
  • PyPI に到達するまでのどこかでキャッシュが返ってきている可能性

コンピューター:

  • ホストの Docker, Docker Compose のバグの可能性

切り分け

可能であれば、
現在コンテナをビルドしているコンピューターとネットワークの
どちらかだけを交換してみてビルドを行い、切り分けを行うと
原因がより明確になります

コンピューター ネットワーク 結果
今ビルドしているコンピューター 今ビルドしているネットワーク ×
今ビルドしているコンピューター 別のネットワーク
別のコンピューター 今ビルドしているネットワーク
別のコンピューター 別のネットワーク

第一次調査

次のコマンドで Python のイメージを削除してやり直すと改善しませんでしょうか?:

# 念のため失敗した Python イメージをバックアップ
docker tag python:3.6 python:sut
docker rmi python:3.6
docker-compose build --no-cache

こちらの環境では問題なく動作しました。

$ docker-compose up
Creating network "test-docker-django_default" with the default driver
Pulling db (postgres:)...
latest: Pulling from library/postgres
Digest: sha256:9ba6355d27ba9cd0acda1e28afaae4a5b7b2301bbbdc91794dcfca95ab08d2ef
Status: Downloaded newer image for postgres:latest
Building web
Step 1/7 : FROM python:3.6
3.6: Pulling from library/python
Digest: sha256:6655d57ae9272f09839a25d0ec0d272513663d99a4ad7af8b061c83a76d10295
Status: Downloaded newer image for python:3.6
 ---> 13efce2de907
Step 2/7 : ENV PYTHONUNBUFFERED 1
 ---> Running in 543c271145c9
Removing intermediate container 543c271145c9
 ---> 12d70abf69df
Step 3/7 : RUN mkdir /code
 ---> Running in 8f02235b9c79
Removing intermediate container 8f02235b9c79
 ---> 52ece72377a2
Step 4/7 : WORKDIR /code
 ---> Running in 0b428211651a
Removing intermediate container 0b428211651a
 ---> 95db4a2b1a35
Step 5/7 : ADD requirements.txt /code/
 ---> 960ba26ba189
Step 6/7 : RUN pip install pip==19.1.1 --no-cache-dir
 ---> Running in 19c4c86dae52
Collecting pip==19.1.1
  Downloading pip-19.1.1-py2.py3-none-any.whl (1.4 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 20.1.1
    Uninstalling pip-20.1.1:
      Successfully uninstalled pip-20.1.1
Successfully installed pip-19.1.1
Removing intermediate container 19c4c86dae52
 ---> 9299e009e221
Step 7/7 : RUN pip install -r requirements.txt --no-cache-dir
 ---> Running in 3bc4f7c645a8
Collecting Django==3.0.2 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/55/d1/8ade70e65fa157e1903fe4078305ca53b6819ab212d9fbbe5755afc8ea2e/Django-3.0.2-py3-none-any.whl (7.4MB)
Collecting psycopg2 (from -r requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/a8/8f/1c5690eebf148d1d1554fc00ccf9101e134636553dbb75bdfef4f85d7647/psycopg2-2.8.5.tar.gz (380kB)
Collecting sqlparse>=0.2.2 (from Django==3.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/85/ee/6e821932f413a5c4b76be9c5936e313e4fc626b33f16e027866e1d60f588/sqlparse-0.3.1-py2.py3-none-any.whl (40kB)
Collecting pytz (from Django==3.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/4f/a4/879454d49688e2fad93e59d7d4efda580b783c745fd2ec2a3adf87b0808d/pytz-2020.1-py2.py3-none-any.whl (510kB)
Collecting asgiref~=3.2 (from Django==3.0.2->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/d5/eb/64725b25f991010307fd18a9e0c1f0e6dff2f03622fc4bcbcdb2244f60d6/asgiref-3.2.10-py3-none-any.whl
Building wheels for collected packages: psycopg2
  Building wheel for psycopg2 (setup.py): started
  Building wheel for psycopg2 (setup.py): finished with status 'done'
  Stored in directory: /tmp/pip-ephem-wheel-cache-xfaezrjm/wheels/fb/85/a8/57f24b92b9554880384d00a84881c0ea80cbcee02d6dcede54
Successfully built psycopg2
Installing collected packages: sqlparse, pytz, asgiref, Django, psycopg2
Successfully installed Django-3.0.2 asgiref-3.2.10 psycopg2-2.8.5 pytz-2020.1 sqlparse-0.3.1
WARNING: You are using pip version 19.1.1, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Removing intermediate container 3bc4f7c645a8
 ---> d15023b3318d
Successfully built d15023b3318d
Successfully tagged test-docker-django_web:latest
Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating test-docker-django_db_1 ... done
Creating test-docker-django_web_1 ... done
Attaching to test-docker-django_db_1, test-docker-django_web_1
db_1   | Error: Database is uninitialized and superuser password is not specified.
db_1   |        You must specify POSTGRES_PASSWORD to a non-empty value for the
db_1   |        superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
db_1   |
db_1   |        You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all
db_1   |        connections without a password. This is *not* recommended.
db_1   |
db_1   |        See PostgreSQL documentation about "trust":
db_1   |        https://www.postgresql.org/docs/current/auth-trust.html
web_1  | python3: can't open file 'manage.py': [Errno 2] No such file or directory
test-docker-django_db_1 exited with code 1
test-docker-django_web_1 exited with code 2

こちらで実行したときの Python のコンテナのイメージは次のものでした:

python                                                          3.6                    13efce2de907        2 weeks ago         914MB

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/06/30 00:25

    やっぱりうまくいってないです。DockerImageは同じなのですが。

    $ docker-compose build --no-cache
    db uses an image, skipping
    Building web
    Step 1/6 : FROM python:3.6
    3.6: Pulling from library/python
    Digest: sha256:6655d57ae9272f09839a25d0ec0d272513663d99a4ad7af8b061c83a76d10295
    Status: Downloaded newer image for python:3.6
    ---> 13efce2de907
    Step 2/6 : ENV PYTHONUNBUFFERED 1
    ---> Running in 1d50a6e3f6f2
    Removing intermediate container 1d50a6e3f6f2
    ---> f81579a34ea9
    Step 3/6 : RUN mkdir /code
    ---> Running in fe2fbdd89834
    Removing intermediate container fe2fbdd89834
    ---> d7c3425b06aa
    Step 4/6 : WORKDIR /code
    ---> Running in ddeed0a6b2a5
    Removing intermediate container ddeed0a6b2a5
    ---> bfbd540fc2a3
    Step 5/6 : ADD requirements.txt /code/
    ---> d5ed5a3690a1
    Step 6/6 : RUN pip install -r requirements.txt --no-cache-dir
    ---> Running in 0111d47e55a0
    Collecting Django==3.0.2
    Downloading Django-3.0.2-py3-none-any.whl (7.4 MB)
    Collecting psycopg2
    Downloading psycopg2-2.8.5.tar.gz (380 kB)
    ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
    Django==3.0.2 from https://files.pythonhosted.org/packages/55/d1/8ade70e65fa157e1903fe4078305ca53b6819ab212d9fbbe5755afc8ea2e/Django-3.0.2-py3-none-any.whl#sha256=4f2c913303be4f874015993420bf0bd8fd2097a9c88e6b49c6a92f9bdd3fb13a (from -r requirements.txt (line 1)):
    Expected sha256 4f2c913303be4f874015993420bf0bd8fd2097a9c88e6b49c6a92f9bdd3fb13a
    Got ae0420e9793b5caa43a4eb8728bd5946b3fc711c8cd3113719ff67b68f108432

    psycopg2 from https://files.pythonhosted.org/packages/a8/8f/1c5690eebf148d1d1554fc00ccf9101e134636553dbb75bdfef4f85d7647/psycopg2-2.8.5.tar.gz#sha256=f7d46240f7a1ae1dd95aab38bd74f7428d46531f69219954266d669da60c0818 (from -r requirements.txt (line 2)):
    Expected sha256 f7d46240f7a1ae1dd95aab38bd74f7428d46531f69219954266d669da60c0818
    Got 3afc1b6b89d952edf070c7dd1d90508382ff0cc2a350caca99c01a2e08aa4ed1

    ERROR: Service 'web' failed to build: The command '/bin/sh -c pip install -r requirements.txt --no-cache-dir' returned a non-zero code: 1


    Docker fileの
    RUN pip install pip==19.1.1 --no-cache-dir
    の部分はつけてもつけなくてもエラーになるのでいったん外しています。

    キャンセル

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

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

関連した質問

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