Docker-Compose挂载卷覆盖主机文件

3
我正在使用Docker容器挂载来自内容管理系统(CMS)的目录中的内容文件。挂载工作正常,CMS有一些基本文件,在构建过程中会复制到被挂载的容器文件夹中。然后它将被挂载到主机上的一个目录。现在容器中的文件也在主机上了,我可以更改它们并保持同步。 如果我重新启动我的容器docker-compose stop && docker-compose up -d,主机上的文件将被容器构建的默认文件覆盖。 是否有可能强制使本地文件状态覆盖容器中的文件呢? 谢谢。

1
不要停止,尝试删除容器'docker-compose rm',然后重新运行'docker-compose up -d',这将删除旧容器中的任何文件,并始终使用挂载文件夹中可用的新容器。最终命令为'docker-compose rm -f && docker-compose up -d'。 - Rohan J Mohite
问题在于构建过程中会将默认文件复制到该目录中,因此主机上的文件将被覆盖。 - Philipp Schemel
好的,那这只是一个建议 - 你能否使用IF ELSE条件来在传递参数时复制默认文件或删除旧文件?这可能会解决你的问题。 - Rohan J Mohite
你能为这个问题添加一些代码吗?比如说,是否有一个入口脚本或类似的东西正在从容器中复制数据?你所描述的行为通常不是 Docker 主机目录绑定挂载的方式。看到docker-compose.yml文件也会很有帮助。 - David Maze
2个回答

3
也许尝试将其配置为只读。
docker run -v volume-name:/path/in/container:ro my/image

2

您可以按照 gCoh 的答案将其设置为只读。请参考以下 docker-compose 示例:

volumes:
  - type: bind
    source: ./host-source-folder
    target: /container-folder
    read_only: true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接