如何共享本地文件到docker集装箱与docker集群

这里是我的docker撰写文件

version: '2' services: demoui: image: demoimage ports: - "80:8000" volumes: - ./democonfig/config.js:/usr/local/tomcat/webapps/demo-ui/config.js - ./logs/demo-ui:/usr/local/tomcat/logs restart: unless-stopped 

当我在单个节点中时,这个docker工具组合文件起作用。 搬到docker群后。 它不工作。 它会抛出以下错误

 ERROR: for demoui Error response from daemon: rpc error: code = 2 desc = "oci runtime error: could not synchronise with container process: not a directory" Traceback (most recent call last): File "<string>", line 3, in <module> File "compose/cli/main.py", line 63, in main AttributeError: 'ProjectError' object has no attribute 'msg' docker-compose returned -1 

所以问题是

  1. 如何共享文件到群集?

  2. 还是需要将所有的文件复制到图像并运行?

  3. 请与swarm分享一些docker卷的文档。

您所得到的错误是因为您的卷上的源文件/目录不存在于正在启动的群集节点上。 Docker(和docker-compose )没有办法将这些文件复制到群中的其他主机上。

源文件/目录需要出现在你想共享configuration文件的所有swarm节点上。 您还在撰写文件中使用依赖于上下文的path,这在所有节点中都不一致。 这应该是一个绝对path(即/opt/config而不是./config~/config )。

作为一个快速修复,你将需要将configuration文件复制到同一位置的每个节点(即/ opt或其他目录),并修改你的撰写文件指向这个一致的位置,例如

  volumes: - /opt/config/config.js:/usr/local/tomcat/webapps/demo-ui/config.js - /opt/logs/demo-ui:/usr/local/tomcat/logs 

长期来说,您可以手动同步这些文件,使用像lsyncd这样的工具自动跨节点保持同步,将它们放在NFS卷上,并将其挂载到每个节点上,或者使用类似glusterfs的东西。

只要记住您的日志目录,您可能希望确保您的日志文件不会互相破坏,因此您可能希望将其保留在本地,或者确保日志文件名称在每个节点上都是唯一的(如果使用共享存储)。

Interesting Posts