web-dev-qa-db-ja.com

このapt-getコマンドは、あるコンテキストでは機能するが、他のコンテキストでは機能しないのはなぜですか?

私は次のコマンドを使用してplpythonパッケージをドッカーコンテナに追加しようとしています(Ubunutuイメージを実行しています)(Dockerを知らない場合は無視できるドッカーコマンドであるRUN):

RUN apt-get install -y postgresql-plpython-$PG_MAJOR=$PG_VERSION

ただし、これにより次のエラーが発生します。

E: Unable to locate package postgresql-plpython-9.4
E: Couldn't find any package by regex 'postgresql-plpython-9.4'
INFO[0005] The command [/bin/sh -c apt-get install -y postgresql-plpython-$PG_MA
JOR=$PG_VERSION] returned a non-zero code: 100

ただし、この同じコマンドを 既存のDockerfileのこの部分 に挿入すると(つまり、postgresql-plpython-$PG_MAJOR=$PG_VERSION \行を追加すると、コマンドは機能します。

私はapt-getについてあまり知りません、だから誰かがパッケージが親Dockerfileのコンテキストで見つかりますが、私のDockerfileでは見つかりませんか?パッケージを見つけるにはどうすればよいですか?

1
Miguel

ベースイメージのDockerfileには次の指示があります。

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

これにより、apt-get updateによってダウンロードされたパッケージリストがクリアされます。そのため、エラーが発生します。この問題を解決するには、Dockerfileでapt-get updateを再度実行します。

5
Andreas Veithen

必ず更新コマンドとインストールコマンドをバンドルしてください。公式の Docker docs を参照してください。 Dockerには、キャッシュレイヤーの無効化に関するさまざまな問題があります。

RUN apt-get update && apt-get install postgresql-plpython-$PG_MAJOR=$PG_VERSION

また、インストール出力を無音化し、aptキャッシュをクリーンアップして、イメージとキャッシュサイズを最小化することもできます。

RUN apt-get update -qqy \
 && apt-get install -qqy \
 postgresql-plpython-$PG_MAJOR=$PG_VERSION \
 && rm -rf /var/lib/apt/lists/* /var/cache/apt/*
0
Twisted Pear