![](/img/trans.png)
[英]How to correctly install custom package in Docker with docker-compose?
[英]How to install local pip package from mounted volume in docker-compose
我正在開發一個依賴於另一個項目的項目。
在實時環境中,只需使用pip install
即可發布和安裝依賴項。 在我的本地環境中,我希望能夠使用pip install -e
命令安裝本地依賴項。
結構如下:
- Home
--- Project1
----- docker-compose
----- Dockerfile
--- relaton-py
在這個結構中,Project1 依賴於 relaton-py,因此我想使用本地的 relaton-py 來“安裝”這個依賴項。
我的 docker-compose 文件如下所示:
volumes:
- .:/code
- /Users/myuser/Dev/Projects/relaton-py:/relaton-py
而 Dockerfile 看起來像:
COPY requirements.txt /code/requirements.txt
RUN ["pip", "install", "-e", "relaton-py"]
WORKDIR /code
RUN ["pip", "install", "-r", "requirements.txt"]
# Copy the rest of the codebase
COPY . /code
嘗試旋轉環境時,出現以下錯誤:
=> ERROR [local/web-precheck:latest 11/19] RUN ["pip", "install", "-e", "relaton-py"] 1.2s
------
> [local/web-precheck:latest 11/19] RUN ["pip", "install", "-e", "relaton-py"]:
#27 0.685 ERROR: relaton-py is not a valid editable requirement. It should either be a path to a local project or a VCS URL (beginning with bzr+http, bzr+https, bzr+ssh, bzr+sftp, bzr+ftp, bzr+lp, bzr+file, git+http, git+https, git+ssh, git+git, git+file, hg+file, hg+http, hg+https, hg+ssh, hg+static-http, svn+ssh, svn+http, svn+https, svn+svn, svn+file).
#27 0.889 WARNING: You are using pip version 22.0.4; however, version 22.1.2 is available.
#27 0.889 You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
------
failed to solve: rpc error: code = Unknown desc = executor failed running [pip install -e relaton-py]: exit code: 1
但是,如果我嘗試不在 Dockerfile 中安裝此本地依賴項,整個環境就會啟動,我可以使用相同的命令pip install -e relaton-py
有沒有人不得不處理這種事情? 關於如何使 Dockerfile 識別已安裝卷中的文件的任何想法?
卷僅在您運行容器時綁定,而pip install -e relaton-py
在您構建映像時發生,因此卷綁定尚未發生。
我建議在容器中嵌入 relaton-py。
為此,您需要更改構建上下文以包含 relaton-py 目錄。 所以在docker-compose.yml
services:
Project1:
build:
context: ../
dockerfile: ./Project1/Dockerfile
並相應地調整您的 Dockerfile
COPY ./relaton-py /relaton-py
RUN ["pip", "install", "-e", "/relaton-py"]
WORKDIR /code
COPY ./Project1/requirements.txt requirements.txt
RUN ["pip", "install", "-r", "requirements.txt"]
COPY ./Project1 .
這樣,當您構建映像時,代碼將可用。
然后,如果您還需要在容器中進行本地代碼更改,您可以通過執行以下操作將本地目錄安裝在容器內的目錄之上:
volumes:
- .:/code
- ../relaton-py:/relaton-py
對於更簡單的包,只需將其直接安裝到site-packages
就足夠了。
在您的示例中,您可能想嘗試:
relaton-py
(只是 package 的源代碼形式,例如 Git 存儲庫)放在 Compose 文件上方的一個目錄中,以及volumes
下的docker-compose.yml
:- ../relaton-py/relaton:/usr/local/lib/python3.10/site-packages/relaton:ro
假設您使用 Python 3.10,這應該覆蓋在 Docker 映像構建期間從 PyPI 安裝的任何內容,使用主機系統中的目錄,該目錄將以只讀模式安裝以避免意外更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.