如何共享本地文件到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
所以问题是
-
如何共享文件到群集?
-
还是需要将所有的文件复制到图像并运行?
-
请与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的东西。
只要记住您的日志目录,您可能希望确保您的日志文件不会互相破坏,因此您可能希望将其保留在本地,或者确保日志文件名称在每个节点上都是唯一的(如果使用共享存储)。