使用这样的dockerfile
FROM python:3.5.5-alpine
ARG CONTAINER_HOME_DIR
ENV CONTAINER_HOME_DIR=$CONTAINER_HOME_DIR
WORKDIR $CONTAINER_HOME_DIR
COPY wall_e/src/requirements.txt .
RUN apk add --update alpine-sdk libffi-dev && \
apk add freetype-dev && \
apk add postgresql-dev && \
pip install --no-cache-dir Cython && \
pip install --no-cache-dir -r requirements.txt && \
apk --update add postgresql-client
COPY wall_e/src ./
CMD ["./wait-for-postgres.sh", "db", "python", "./main.py" ]
如果我随后将此docker-compose
使用此dockerfile,则docker-compose何时确定需要重新创建将用于从该映像制作docker容器的docker映像?
如果我对wall_e/src/requirements.txt
文件进行更改,它将重新制作docker映像,或者如果我对RUN
行进行更改或对位于的任何文件进行更改,它将重新制作docker映像。在wall_e/src
中,甚至完全更改COPY
的行还是CMD
的行?
让我们假设我正在使用docker-compose up
,而我没有使用选项--force-recreate
答案 0 :(得分:1)
一旦构建了映像,docker-compose将不会查看您的dockerfile。
它将使用该图像,并且仅应用其配置(docker-compose.yml
)。
因此,假设您docker-compose up
,然后编辑docker-compose.yml
文件,requirements.txt
和dockerfile
,而仅使用docker-compose .yml更改将被考虑在内。
如果您需要重建图像,则必须专门使用:
docker-compose restart
答案 1 :(得分:1)
除非1)指示这样做,否则2)如果命名的映像不存在,则Docker将不会重建映像。
话虽这么说,当您重建时,它将尝试根据其拥有的所有缓存信息进行重建,并且除非对dockerfile进行了修改或通过COPY
引用的文件具有被修改。经过重新处理的步骤之后的所有后续步骤也将被重新处理,因为构建过程基本上是根据从dockerfile中先前步骤构建的子映像创建新的子映像。
但是,如果您指定—no-cache
,它将重新处理dockerfile中的所有步骤。