Docker挂载项目volume后如何忽略.git及PhpStorm文件?求助
嘿,我懂你的困扰——想用Docker Volume挂载本地项目,却不想让容器里出现.git文件夹和PhpStorm的相关文件,同时还不能影响本地的Git提交,之前试了.dockerignore却没效果对吧?这其实是因为你搞混了.dockerignore的作用场景,咱们一步步来搞定:
为什么.dockerignore在这里没用?
.dockerignore只在构建镜像(执行docker build命令)的时候生效,它的作用是告诉Docker:哪些文件不要打包进镜像里。但你是用Volume直接把本地目录挂载到容器中,这时候容器直接读取的是你本地的文件系统,.dockerignore根本管不到这个环节,所以容器里还是会看到.git这些文件。
可行的解决方案
方案1:只挂载项目中需要的目录(推荐)
与其挂载整个项目根目录,不如只挂载容器实际需要的业务目录(比如src、public、config等),这样.git、.idea(PhpStorm的配置目录)这些无关文件自然不会进入容器,而且完全不影响本地的Git提交操作。
举个命令行的例子:
docker run -d \ -v /你的本地项目路径/src:/容器内对应路径/src \ -v /你的本地项目路径/public:/容器内对应路径/public \ -v /你的本地项目路径/config:/容器内对应路径/config \ 你的镜像名称
如果用Docker Compose的话,配置文件可以这么写:
services: your-app-service: image: your-app-image volumes: - ./src:/app/src - ./public:/app/public - ./config:/app/config
方案2:通过临时目录同步需要的文件(适合必须挂载根目录的场景)
如果因为某些原因必须挂载整个项目根目录,你可以在本地创建一个临时的“干净”目录,用rsync把需要的文件同步过去,再挂载这个临时目录到容器:
- 创建临时目录:
mkdir -p /tmp/clean-project
- 同步需要的文件(排除.git和.idea):
rsync -av --exclude='.git' --exclude='.idea' /你的本地项目路径/ /tmp/clean-project/
- 挂载临时目录到容器:
docker run -v /tmp/clean-project:/容器内项目路径 你的镜像名称
这种方法需要注意定期同步文件(如果本地有修改的话),不如方案1方便,所以优先推荐方案1。
额外提示
PhpStorm的相关文件一般存放在.idea目录里,所以不管是用哪种方案,只要确保这个目录不被挂载/同步到容器里就行,本地的.idea目录完全可以保留,不影响Git提交(只要你的本地.gitignore里已经排除了.idea,不过就算没排除,也不会影响容器里的内容)。
内容的提问来源于stack exchange,提问作者user6830821




