Dockerfile 包含:
RUN /bin/bash -c "python3 -m pip install --upgrade pip && python3 -m pip install conan"
一旦構建,它就永遠不會再次運行它,而是使用快取。只要版本(pip conan's)沒有改變,我就可以了。
處理這種情況的最佳做法是什么?docker/buildah如果有新版本,我想檢測是否需要更改圖層。我故意沒有添加任何版本以始終獲得最新版本。
我一直在努力尋找我遇到的錯誤的原因,柯南在新版本中更改了他們的 SSL 證書,而我堅持使用以前的版本,阻止我安裝軟體包。
uj5u.com熱心網友回復:
這種沖突正是為什么要使用列出要使用的特定版本包的版本鎖定檔案的原因。即使您認為您通常需要最新版本,這也為您(或打包工具)提供了一個記錄您知道有效的特定版本集的地方。
例如,使用 Python 的基本setuptools系統,您可以在setup.cfg檔案中宣告您的應用程式需要該特定包
[options]
install_requires=
conan
現在在您的本地(非 Docker)開發環境中,您可以安裝它
rm -rf venv # clean up the old virtual environment
python3 -m venv venv # create a new virtual environment
. venv/bin/activate # activate it
pip install -e . # install current directory and its dependencies
或者,如果您已經設定了虛擬環境
pip install --upgrade -e .
現在您可以要求pip轉儲需求檔案
pip freeze > requirements.txt
在你的 Dockerfile 中,COPY新requirements.txt檔案,并使用它來安裝包。
FROM python:3.9
# Upgrade pip, since it likes to complain about being out of date
RUN pip install --upgrade pip
# Install package dependencies
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
# Install the rest of the application
COPY . .
CMD ["./application.py"]
Docker 的層快取系統意味著,如果requirements.txt檔案發生更改,Docker 將重新運行pip install,如果沒有,它將跳過它(直到下一COPY行檔案發生更改)。同時,您可以控制要使用的確切版本(您可以添加版本約束setup.cfg或手動編輯requirements.txt以避免版本損壞),因此上游中斷更改并不意味著您無法發布代碼。最后,您在開發環境和 Docker 中使用相同的打包系統,因此很容易保持一致(我通常不鼓勵pip install在 Dockerfile 中使用單個包)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/367661.html
