【问题标题】:How to share local files to docker container In swarm with docker-compose如何将本地文件共享到 docker 容器在 swarm 中使用 docker-compose
【发布时间】:2016-10-01 06:08:25
【问题描述】:

这是我的 docker compose 文件

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 compose 文件可以工作。移至 docker swarm 后。它不工作。它抛出以下错误

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. 如何共享文件到swarm集群?

  2. 还是需要将所有文件复制到镜像中运行?

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

【问题讨论】:

    标签: docker docker-compose docker-swarm docker-volume


    【解决方案1】:

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

    源文件/目录需要存在于您要与之共享配置文件的所有 swarm 节点上。您还在撰写文件中使用了上下文相关的路径,这在所有节点之间不会保持一致。这应该是一个绝对路径(即/opt/config 而不是./config~/config)。

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

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

    长期而言,您可以手动同步这些文件,使用 lsyncd 之类的工具使它们在节点之间自动保持同步,将它们放在 NFS 卷上并将其挂载到每个节点上,或者使用 @987654322 之类的工具@。

    请记住您的日志记录目录,您可能希望确保您的日志文件不会相互干扰,因此您可能希望将它们保持在本地,或者如果使用共享存储,则确保每个节点的日志文件名都是唯一的.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多