使用docker-compose挂载docker卷的问题

4

我的情境

我正在尝试使用docker-compose.yml文件构建Docker Swarm。

version: '3'

services:
  myapp-nginx:
    image: nginx:1.10
    volumes:
     - ./nginx/certs:/etc/nginx/certs
    ports:
      - 80:80
      - 443:443

使用以下构建命令:

$ docker stack deploy --compose-file docker-compose.yml myapp

Creating network myapp_default
Creating service myapp_myapp-nginx

我的系统有Docker Version 17.03.1-ce-mac5 (16048)

问题

卷挂载不起作用,如果我将volumes: - ./nginx/certs:/etc/nginx/certs注释掉,则一切正常。

否则nginx根本无法工作,我看到的是:

CAGTAM1059934:docker iskumar$ docker stack ps myapp
ID            NAME                  IMAGE       NODE      DESIRED STATE  CURRENT STATE            ERROR                             PORTS
efjia8b7y6jd  myapp_myapp-nginx.1      nginx:1.10  manager1  Ready          Rejected 5 seconds ago   "invalid mount config for type…"  
c9c6ogh11osi   \_ myapp_myapp-nginx.1  nginx:1.10  worker2   Shutdown       Rejected 10 seconds ago  "invalid mount config for type…"  
iveikxpnbq6x   \_ myapp_myapp-nginx.1  nginx:1.10  worker1   Shutdown       Rejected 15 seconds ago  "invalid mount config for type…"  

在docker-compose v3中,有没有特殊的方法来挂载卷?
2个回答

0

在挂载卷时,无论是使用docker run还是其他方式,都必须使用绝对路径。

$ docker run --rm -it -v ./eos:/eos:ro ubuntu 
docker: Error response from daemon: create ./eos: "./eos" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intented to pass a host directory, use absolute path.
See 'docker run --help'

绝对路径仍然不起作用,例如 /Applications/XAMPP/xamppfiles/htdocs/myapp/docker/nginx/certs:/etc/nginx/certs:ro - Ish
1
我遇到了“类型无效的挂载配置”错误,尽管在MacBook本地Docker安装中使用“docker-compose up -d”命令可以正常工作。但是,在切换到Docker集群并使用“eval $(docker-machine env manager1)”命令和“docker stack deploy”部署后,我遇到了问题。 - Ish
这是完整的错误信息吗?通过深入研究Docker代码,有多种可能性。 - Ricardo Branco
我使用 docker stack ps myapp 查看日志时出现了 错误:"无效的挂载配置类型...",是否有其他命令可以查看详细日志呢? - Ish
我需要“...” - Ricardo Branco
让我们在聊天中继续这个讨论 - Ish

0

我在我的 MacBook 上运行 docker stack deploy,而不是在 boot2docker VM 上运行。这就是为什么系统找不到那些网络挂载源的原因,尽管我已经通过 eval $(docker-machine env manager1) 激活了 manager1。

首先,我使用了 --no-trunc 参数来查看完整的错误消息。

$> docker node ps --no-trunc
---
Showed "invalid mount config for type "bind": bind source path does not exist"  
---

之后将文件从主机系统(我的 MacBook)复制到虚拟机中,启动堆栈工作正常。

感谢 https://github.com/docker/docker/issues/31202#issuecomment-281312704 的贡献。


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