使用docker-compose

时间:2017-03-29 22:12:14

标签: docker docker-compose docker-machine

我的场景

我正在尝试使用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 :(得分: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'

答案 1 :(得分: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"  
---

之后将文件从主机系统( My MacBook )复制到VM并启动堆栈工作正常。

归功于https://github.com/docker/docker/issues/31202#issuecomment-281312704