Docker: Bind mount not reflecting unless container is restarted

Question:

TLDR: Flask application. When I make changes to the app.py file inside source folder of the bind, the change is reflected in the target folder. But when I hit the API from Postman, the change is not seen unless the container is restarted.

Long Version:

I am just starting with docker and was trying bind mounts. I started my container with the following command:

docker run -p 9000:5000 --mount type=bind,source="$(pwd)"/src/,target=/src/ voting-app:latest

My Dockerfile is as below:

FROM python:3.8.10-alpine

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY ./src ./src

WORKDIR ./src

ENTRYPOINT ["python"]

CMD ["app.py"]

This post mentioned that, if the inode of the file changes, docker cannot handle this especially if it is a single file bind. Mine is not, and the inode was not changing either.

When I run docker exec <container_id> cat app.py, I can see that the changes are carried over to the container file. It is just the API that is not reflecting the change.

Docker version 20.10.17, build 100c701.

Can someone please tell me what I am missing here ? Also, please feel free to ask for more information.

The full code is available here.

Asked By: Hari K

||

Answers:

When the python file is running, it seems it is not automatically restarted when the file changes. So you need a process to watch the file and restart upon change.

Answered By: bluepuma77
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.