簡體   English   中英

我如何在正在運行的 docker 容器中安裝包並且包在不重新創建容器的情況下生效?

[英]how I can install packages inside a running docker container and packages take effect without recreating the container?

我正在運行docker compose up ,它由多個容器組成,其中 python 3.* 並且所有容器都附加了卷。 我也已經創建了 requirements.txt 文件我輸入了 python 容器並安裝了 x 包然后我做了pip freeze > requirements.txt然后我停止了容器並再次重新啟動容器,但是 python 容器沒有啟動並且日志說modules x is not found ,所以我所做的是 O 刪除了容器並創建了一個新容器並且它有效,我的問題是,有沒有辦法不刪除容器(我認為它過度殺戮)
但是有些人仍然能夠管理在容器中安裝包?

Dockerfile

FROM python:3.6
RUN apt-get update
RUN apt-get install -y gettext

RUN mkdir -p /var/www/server
COPY src/requirements.txt /var/www/server/

WORKDIR /var/www/server
RUN pip install -r ./requirements.txt
EXPOSE 8100
ENTRYPOINT sleep 3 && python manage.py migrate && python manage.py runserver 0.0.0.0:8100

您應該在構建期間將項目源文件移動到容器中,並在其中運行pip install -r requirements.txt

下面是一個給你一個想法的例子:

--- Other build commands follow
WORKDIR /usr/src/service
COPY ./service . # Here, I am moving everything of the service folder/module into WORKDIR within docker
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
-- Other build commands follow. 

最后,您將使用 docker-compose 構建服務在構建上下文中指向 Dockerfile 的 docker-compose.yml 中構建定義服務。

...
build:
  context: .
    dockerfile: service/Dockerfile
...

大體上,設置你的 Dockerfile,這樣你需要首先做最少變化和最耗時的工作

FROM FOO
RUN get os-level and build dependencies
COPY only exactly files needed to identify dependencies
RUN install dependencies that takes a long time
RUN install more frequently-changing dependencies
COPY rest of your wanted content
ENTRYPOINT define me

正如@coldly在他們的回答中所說,將您的依賴項寫入需求文件並在容器構建期間安裝它們!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM