更改文件时Docker卷中的文件未在Windows上刷新

时间:2018-09-23 15:45:46

标签: docker docker-compose

我有适用于Windows的Docker,切换到Docker工具箱,现在又回到了适用于Windows的Docker,我遇到了Volumes问题。

在卷工作正常之前,运行nodemon / tsnode / CLI监视文件的容器在源代码更改时可以正常重新启动,但是现在它们根本没有,因此看来主机中的文件更改没有被填充在容器中。

这是为一项服务的docker-compose:

api:
   build:
     context: ./api
     dockerfile: Dockerfile-dev
   volumes:
     - ./api:/srv
   working_dir: /srv
   links:
     - mongo
   depends_on:
     - mongo
   ports:
    - 3030:3030
   environment:
     MONGODB: mongodb://mongo:27017/api_test
   labels:
     - traefik.enable=true
     - traefik.frontend.rule=Host:api.mydomain.localhost

此ID Dockerfile-dev

FROM node:10-alpine
ENV NODE_ENV development
WORKDIR /srv
EXPOSE 3030
CMD yarn dev // simply nodemon, working when ran from host

有人可以帮忙吗? docker run --rm -v c:/Users:/data alpine ls /data共享并验证了C驱动器,并正确显示了文件列表。

我将非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在Windows之上使用Docker开发nodejs / typescript应用程序时,我们在团队中遇到了完全相同的问题,这一直是一个很大的痛苦。但是,老实说,Windows通过不将更改事件传播到容器来做正确的事情(Linux主机也不会将fsnotify事件传播到容器,除非从容器内部进行更改)。因此,底线是:除非您在容器中实际更改文件而不是在Docker主机上更改文件,否则我认为不会避免此问题。您可以使用诸如docker-sync之类的代码同步工具来实现这一目标,有关可用选项的列表,请参见此页面:https://github.com/EugenMayer/docker-sync/wiki/Alternatives-to-docker-sync

由于我们在此类问题上苦苦挣扎了很长时间,所以我和一位同事启动了一个名为DevSpace CLI的开源项目:https://github.com/covexo/devspace

DevSpace CLI可以在本地文件夹和dev容器内的文件夹之间建立可靠且超快速的2路代码同步(适用于任何Kubernetes集群,任何卷,甚至适用于临时/非永久文件夹),并且设计用于与热加载工具(例如nodemon)完美配合。在某个公共云上安装一键安装程序的minikube或集群,在项目内运行devspace up,您将可以在DevSpace中进行编程,而不必担心本地Docker问题和热重载问题。让我知道它是否对您有用,或者您缺少什么。

答案 1 :(得分:0)

我最近一直受困于此(2020年2月,Docker Desktop 2.2),基本解决方案没有任何帮助。

但是,当我尝试WSL 2并从Ubuntu shell内运行docker-compose时,它变得可以立即拾取文件中的更改。因此,如果有人在观察-请尝试从WSL 2升级Docker。