I am using docker-compose in visual studio 2019 with docker for windows running linux containers. I want to enable hot reload for the angular client app.
I modified the npm command running the app to include poll like:
"docker-start": "ng serve --host 0.0.0.0 --port 4200 --proxy-config proxy-conf.json --poll 1"
and added a volume into docker-compose like so:
volumes:
- ./ClientApp:/app/
also additionally exposing the webpack port
ports:
- 4200:4200
- 49153:49153
docker-compose file is at the root of the repo and the angular app is in the /ClientApp folder. This makes the application throw cannot GET\ every time I navigate to localhost:4200. If I comment out the volume mapping, the application starts working but the reload does not. I would like it to listen to changes in the code and update the container as needed every time I change any frontend code.
Entire dockerfile:
FROM node:9.6.1
RUN mkdir -p /app
WORKDIR /app
EXPOSE 4200
EXPOSE 49153
ENV PATH /app/node_modules/.bin:$PATH
COPY . /app
RUN npm install --silent
RUN npm rebuild node-sass
CMD ["npm", "run", "docker-start"]
Docker Compose: docker-compose does not detect changes in dockerfile. When specifying a dockerfile in the docker-compose file, TeamCity does not detect this dockerfile has changed so it will still use the old image which causes builds to fail.
Usage: compose-update [OPTIONS] [UPDATE_DIRS]... Update docker-compose images automatically. Takes one or more directorys as input and searches for a compose file in one of the following forms: "compose. yaml", "compose.
Like the restart Docker command, Docker Compose includes the restart property to restart containers automatically.
Use nodemon to automatically restart the node server when code is changed . Before that install nodemon in your docker image and make sure it is present.
Refer this URL to install nodemon :https://www.npmjs.com/package/nodemon
then change your CMD in Dockerfile
CMD ["nodemon", "--exec", "npm", "run", "docker-start"]
This is reload your nodejs application whenever codes are changed
You might be facing several issues here, since Docker and Windows don't get along all to well unfortunately.
The cannot GET\
error is defenitely weird and should not occur. First you might want to verify that your volume was mounted correctly and all data are there after running the container.
If the working directory inside your container is empty (which might be the case) you could try to check your docker settings, whether the required drives are shared correctly.
If they are and you still cannot see any data you might want to reset your credentials. This requires you to provide your windows password to docker.
The bad News
The bad news is, that apparently the inotify
event (which is used to detect changes on mounted volumes) does not work with Docker on Windows yet, according to the Docker Docs. You might want to follow their recommendations on how to get around that issue.
The good News
Luckily, there are many projects which attempt to solve your problem, such as Go-Touch. I haven't verified that myself, but I hope you will benefit from them.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With