【问题标题】:Issue mounting docker volume with docker-compose使用 docker-compose 安装 docker 卷
【发布时间】:2017-03-29 22:12:14
【问题描述】:

我的场景

我正在尝试使用 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 中是否有任何特殊的方式来挂载卷?

【问题讨论】:

    标签: docker docker-compose docker-machine


    【解决方案1】:

    安装卷时必须使用绝对路径,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
    • 我收到invalid mount config for type 错误,尽管相同的脚本在使用docker-compose up -d 的macbook 本地docker 安装上运行良好。但是在使用命令eval $(docker-machine env manager1) 切换到docker 集群并使用docker stack deploy 进行部署后,我遇到了问题。
    • 这是完整的消息错误吗?通过挖掘 Docker 代码,有多种可能性。
    • 我使用docker stack ps myapp查看日志导致Error: "invalid mount config for type…"有没有其他命令可以查看详细日志?
    • 我需要“...”
    【解决方案2】:

    我在我的 macbook 上运行 docker stack deploy,而不是在 boot2docker 虚拟机上运行。这就是为什么系统找不到那些网络挂载源,即使我使用 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)复制到 VM 并启动堆栈工作正常。

    感谢https://github.com/docker/docker/issues/31202#issuecomment-281312704

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2018-02-14
      • 1970-01-01
      相关资源
      最近更新 更多