使docker compose忽略卷内的文件夹
我正在使用docker compose进行Rails设置。为了同步文件,我安装了如下目录(省略了部分代码): 但是,在运行应用程序时,我不希望同步文件夹tmp。 将文件夹添加到DockerRigNore只能解决构建docker映像时的问题。使docker compose忽略卷内的文件夹,docker,docker-compose,Docker,Docker Compose,我正在使用docker compose进行Rails设置。为了同步文件,我安装了如下目录(省略了部分代码): 但是,在运行应用程序时,我不希望同步文件夹tmp。 将文件夹添加到DockerRigNore只能解决构建docker映像时的问题。 在运行docker compose时,如何在主机和来宾之间同步时忽略tmp文件夹?您可以使用数据卷来存储tmp,因为数据卷在安装应用程序目录之前从构建的docker映像复制数据 volumes: - .:/app - /path/to/tmp 可以将第二个
在运行docker compose时,如何在主机和来宾之间同步时忽略tmp文件夹?您可以使用数据卷来存储
tmp
,因为数据卷在安装应用程序目录之前从构建的docker映像复制数据
volumes:
- .:/app
- /path/to/tmp
可以将第二个卷添加到子路径。它将覆盖现有卷的内容。像这样:
app:
build: .
command: rails server -p 3000 -b '0.0.0.0'
volumes:
- .:/app
- ./empty-tmp:/app/tmp
这将有效地使
/app/tmp
在主机系统上显示/empty tmp
的内容。我没有显示/tmp
的内容,而是简单地映射我想要同步的所有文件夹:
- ./app:/app/app
- ./lib:/app/lib
- ./log:/app/log
- ./spec:/app/spec
这似乎解决了问题这以前是可能的,如中所述。docker compose 1.25.0-rc3,file syntax v3提供的解决方案不再适用于我。感谢您的回复。当来宾创建tmp文件夹时,它仍然在主机上创建。实际上,我希望tmp只存在于来宾文件系统中,因此您的目标是防止主机看到容器中的文件。这是不可能的,因为即使可以,任何可以运行
docker
的人都可以exec
进入容器并查看所有内容。问题是rails创建了一个包含服务器当前进程id的tmp目录。如果服务器以前一直在运行,或者容器意外退出,则不会清除此文件夹,从而使新的docker进程无法启动可能的副本
- ./app:/app/app
- ./lib:/app/lib
- ./log:/app/log
- ./spec:/app/spec