使用Docker Swarm定义共享主机卷

时间:2017-07-27 10:13:05

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

我正在尝试使用以下docker-stack.yml文件将我的服务部署到我的Docker Swarm版本17.06-ce。我想使用卷将我的Windows主机上的C:/logs目录映射到容器内的/var/log目录。

version: '3.3'

services:
  myapi:
    image: mydomain/myimage
    ports:
      - "5000:80"
    volumes:
      - "c:/logs:/var/log/bridge"

当我删除卷部分时,我的容器启动正常。添加卷后,容器甚至都不会尝试启动,即

  1. docker container ps --all未显示我的容器。
  2. docker events未显示试图启动的容器。
  3. 以下命令对我有用,所以我知道我的语法是正确的:

    docker run -it -v "c:/logs:/var/log/bridge" alpine
    

    我现在已经阅读了volumes documentation几次。我的卷的语法是否正确?这是支持的方案吗?这是Docker的错误吗?

1 个答案:

答案 0 :(得分:1)

当您在版本2中运行Docker并且使用docker-compose时,我们可以运行自定义卷安装。

在版本3中,我们必须使用具有默认卷路径或自定义路径的命名卷。

这是docker-compose,带有默认音量

version: "3.3"

services:
  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: dnsrr

volumes:
  db-data:

卷已安装到默认 / var / lib / docker / volumes / repo / _data

我们可以选择将自定义路径安装到卷

version: "3.3"

services:
  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: dnsrr

volumes:
  db-data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: /home/ubuntu/db-data/

VOLUMES FOR SERVICES, SWARMS, AND STACK FILES