システム上の隣接するパッケージに依存するドッカーイメージにビルドするパッケージがあります。
私の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+
ここで何が間違っていますか?
まず、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ができました