Docker-compose 不反映需求.txt的变化



当我运行时,我的requirements.txt中的更改不会反映出来:

docker-compose -f docker-compose-dev.yml up -d

docker-compose-dev.yml

version: '3.6'
services:
web:
build:
context: ./services/web
dockerfile: Dockerfile-dev
volumes:
- './services/web:/usr/src/app'
ports:
- 5001:5000
environment:
- FLASK_ENV=development
- APP_SETTINGS=project.config.DevelopmentConfig
- DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
- DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test  
depends_on:  
- web-db
web-db:  
build:
context: ./services/web/project/db
dockerfile: Dockerfile
ports:
- 5435:5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
nginx:
build:
context: ./services/nginx
dockerfile: Dockerfile-dev
restart: always
ports:
- 80:80
depends_on:
- web
- client
client:
build:
context: ./services/client
dockerfile: Dockerfile-dev
volumes:
- './services/client:/usr/src/app'
- '/usr/src/app/node_modules'
ports:
- 3007:3000
environment:
- NODE_ENV=development
- REACT_APP_WEB_SERVICE_URL=${REACT_APP_WEB_SERVICE_URL}
depends_on:
- web

Dockerfile-dev

# base image
FROM python:3.6-alpine
# install dependencies
RUN apk update && 
apk add --virtual build-deps gcc python-dev musl-dev && 
apk add libffi-dev && 
apk add postgresql-dev && 
apk add netcat-openbsd && 
apk add bind-tools && 
apk add --update --no-cache g++ libxslt-dev && 
apk add jpeg-dev zlib-dev
ENV PACKAGES="
dumb-init 
musl 
libc6-compat 
linux-headers 
build-base 
bash 
git 
ca-certificates 
freetype 
libgfortran 
libgcc 
libstdc++ 
openblas 
tcl 
tk 
libssl1.0 
"
ENV PYTHON_PACKAGES="
numpy 
matplotlib 
scipy 
scikit-learn 
nltk 
" 
RUN apk add --no-cache --virtual build-dependencies python3 
&& apk add --virtual build-runtime 
build-base python3-dev openblas-dev freetype-dev pkgconfig gfortran 
&& ln -s /usr/include/locale.h /usr/include/xlocale.h 
&& python3 -m ensurepip 
&& rm -r /usr/lib/python*/ensurepip 
&& pip3 install --upgrade pip setuptools 
&& ln -sf /usr/bin/python3 /usr/bin/python 
&& ln -sf pip3 /usr/bin/pip 
&& rm -r /root/.cache 
&& pip install --no-cache-dir $PYTHON_PACKAGES 
&& pip3 install 'pandas<0.21.0' 
&& apk del build-runtime 
&& apk add --no-cache --virtual build-dependencies $PACKAGES 
&& rm -rf /var/cache/apk/*
# set working directory
WORKDIR /usr/src/app
# add and install requirements
COPY ./requirements.txt /usr/src/app/requirements.txt  # <--- refer to EDIT
RUN pip install -r requirements.txt
# add entrypoint.sh
COPY ./entrypoint.sh /usr/src/app/entrypoint.sh
RUN chmod +x /usr/src/app/entrypoint.sh
# add app
COPY . /usr/src/app
# run server
CMD ["/usr/src/app/entrypoint.sh"]

我错过了什么?

编辑

就像[Docker如何运行pip要求.txt中接受的答案一样,只有在有更改的情况下?,我已经在将整个应用程序添加到映像之前在单独的构建步骤中复制了requirements.txt文件,但它似乎不起作用。

我认为问题可能是,如果您进行更改,仅靠$ docker-compose up将无法重建图像。为了使docker-compose包含您对requirements.txt所做的更改,您需要将--build标志传递给docker-compose

即改为运行:

docker-compose -f docker-compose-dev.yml up --build -d

这将强制docker-compose重建映像。但是,这将重建docker-compose文件中的所有图像,这些图像可能是需要的,也可能是不需要的。

如果您只想重建单个服务的映像,您可以先运行docker-compose -f docker-compose-dev.yml build web,然后只需运行原始docker-compose命令即可。

有关build命令的详细信息,请单击此处。

尝试从复制的文件安装需求

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

这是他们的Dockerfile的一个例子

COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt

这就是你所拥有的

RUN pip install -r requirements.txt

然后,在更改 docker 文件后,您必须停止容器,删除映像,构建一个新映像,然后从中运行容器。

停止容器并删除映像。

docker-compose down
docker-compose --rmi all

--rmi all- 删除所有图像。您可能希望使用--rmi IMAGE_NAME

并启动它(如果您不使用默认参数,请使用您的参数更改这些命令)。

docker-compose up

更新

如果你正在运行 docker 并且不想停止它并重建映像(如果你只想安装一个包或运行一些命令,甚至启动一个新应用程序),你可以从本地机器连接容器并运行命令行命令。

docker exec -it [CONTAINER_ID] bash

要获得[CONTAINER_ID],请运行

docker ps

注意docker-compose ps会为你提供容器名称,但你需要容器 ID 来 ssh 容器。

最新更新