web-dev-qa-db-ja.com

Dockerビルドの一部としてpipを使用してローカルパッケージをインストールする方法

システム上の隣接するパッケージに依存するドッカーイメージにビルドするパッケージがあります。

私のrequirements.txtは次のようになります。

-e ../other_module
numpy==1.0.0
flask==0.12.5

Virtualenvでpip install -r requirements.txtを呼び出すと、これは正常に機能します。ただし、Dockerfileでこれを呼び出す場合、たとえば:

 ADD requirements.txt /app
RUN pip install -r requirements.txt 

docker build .を使用して実行すると、次のようなエラーが表示されます。

../other_module should either be a path to a local project or a VCS url beginning with svn+, git+, hg+, or bzr+

ここで何が間違っていますか?

18
AnjoMan

まず、other_moduleをDockerイメージに追加する必要があります。それなしでは、pip installコマンドはそれを見つけることができません。ただし、 ドキュメント に従って、Dockerfileのディレクトリ外にあるディレクトリをADDすることはできません。

パスはビルドのコンテキスト内にある必要があります。 Dockerビルドの最初のステップはコンテキストディレクトリ(およびサブディレクトリ)をdockerデーモンに送信することなので、../something/somethingを追加することはできません。

したがって、other_moduleディレクトリをDockerfileと同じディレクトリに移動する必要があります。つまり、構造は次のようになります。

.
├── Dockerfile
├── requirements.txt
├── other_module
|   ├── modue_file.xyz
|   └── another_module_file.xyz

次に、dockerfileに次を追加します。

ADD /other_module /other_module
ADD requirements.txt /app
WORKDIR /app
RUN pip install -r requirements.txt

WORKDIRコマンドは/appに移動し、次のステップRUN pip install.../appディレクトリ内で実行されます。そしてapp-directoryから、directory../other_module avaliableができました

21
Cleared