使docker compose忽略卷内的文件夹

使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进行Rails设置。为了同步文件,我安装了如下目录(省略了部分代码):

但是,在运行应用程序时,我不希望同步文件夹tmp。 将文件夹添加到DockerRigNore只能解决构建docker映像时的问题。
在运行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