侦听更改并在代码更改时重新加载容器-docker-compose

时间:2019-04-21 16:10:24

标签: angular visual-studio docker docker-compose hot-reload

我在Visual Studio 2019中将docker-compose与运行Linux容器的Windows的docker结合使用。我想为角度客户端应用程序启用热重装。

我修改了运行应用程序的npm命令,使其包含以下民意调查:

"docker-start": "ng serve --host 0.0.0.0 --port 4200 --proxy-config proxy-conf.json --poll 1"

并像这样将一个卷添加到docker-compose中:

volumes:
  - ./ClientApp:/app/

还另外公开了webpack端口

ports:
  - 4200:4200
  - 49153:49153

docker-compose文件位于存储库的根目录,Angular应用位于/ ClientApp文件夹中。这使得每次我导航到localhost:4200时,应用程序都无法获取GET \。如果我注释掉了卷映射,该应用程序将开始工作,但重新加载不会。我希望它每次更改任何前端代码时都听代码中的更改并根据需要更新容器。

整个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"]

2 个答案:

答案 0 :(得分:1)

更改代码后,使用nodemon自动重新启动节点服务器。在此之前,在您的docker映像中安装nodemon并确保它存在。

引用此URL安装nodemon:https://www.npmjs.com/package/nodemon

然后在Dockerfile中更改CMD

CMD ["nodemon", "--exec", "npm", "run", "docker-start"]

这是每当代码更改时重新加载您的nodejs应用程序

答案 1 :(得分:1)

您可能会在这里面临几个问题,因为Docker和Windows并不能很好地相处。

cannot GET\错误很奇怪,不应发生。首先,您可能要验证运行容器后是否正确安装了卷,并且所有数据都在那里。

如果容器内的工作目录为空(可能是这种情况),则可以尝试检查docker设置,以确保所需的驱动器是否正确共享。

如果是这样,并且您仍然看不到任何数据,则可能要重置凭据。这需要您将Windows密码提供给docker。

Docker Settings

坏消息

坏消息是,Docker Docs表示,显然inotify事件(用于检测已安装卷上的更改)尚不适用于Windows上的Docker。您可能要遵循他们的建议,以解决该问题。

好消息

幸运的是,有许多项目试图解决您的问题,例如Go-Touch。我尚未证明自己,但希望您能从中受益。