I have some issue with ng serve
in my docker container running by docker-compose
.
Dockerfile
FROM node:7.1
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm install
RUN npm install -g angular-cli
COPY . /usr/src/app
EXPOSE 4200
CMD [ "npm", "start" ]'
And my docker-compose.yml
web:
build: .
ports:
- '8089:4200'
volumes:
- .:/usr/src/app/
environment:
- NODE_ENV=dev
command: bash -c "npm start"
Everything works great when I run it but the editing file does not rise reload of application. File is changed, I'm sure because I check it by ssh connection and the file in the container is edited. When container is restarted again every change is applied. I thought when I switch with building image by only docker to compose this will disappearr, but do not.
When I call touch some file from docker exec
webpack
reload all file and it work without restarting container.
Someone have solution?
I found solution for both problems:
inotify -> just edit
package.json
in"scripts"
section this line:"start": "ng serve --host 0.0.0.0 --poll"
, required only for Windows host,hot reload -> add
expose 49153
inDockerfile
and ports- '49153:49153'
indocker-compose.yml
like @kstromeiraos mentioned.Webpack uses a port to do live reload of the application. That port is
49153
by default.You have to expose and bind that port in the container to the host port and that should solve your problem.
So, add this to your
Dockerfile
.And this to your
docker-compose.yml
.My solution using node:slim.
No need for copying data into containers. Just use volumes.
Dockerfile:
NOTE:
--poll 1
Compose: