我有适用于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驱动器,并正确显示了文件列表。
我将非常感谢您的帮助。
答案 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。