docker - 使用 Docker Swarm 定义共享主机卷

标签 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 不显示容器尝试启动。

以下命令适用于我,因此我知道我的语法是正确的:

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

我已阅读volumes documentation现在有几次了。我的卷的语法正确吗?这是受支持的场景吗?这是 Docker 错误吗?

最佳答案

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

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

这是带有默认卷的 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

关于docker - 使用 Docker Swarm 定义共享主机卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45347770/

相关文章:

docker - 有没有办法在 Dockerfile 中取消暴露端口?

spring-boot - Spring Boot App容器无法连接到MySQl容器

windows - Docker postgres 容器丢失了应该存储在卷中的数据

nginx - 用作卷路径的 docker-compose 环境变量未得到解析

spring-boot - Spring Logback Logger没有进入Elasticsearch

amazon-web-services - 使用rexray/ebs运行TeamCity的Docker Swarm在AWS EBS中实现驱动器持久性的问题

docker - Docker群节点失败 'non-zero exit'

docker-swarm - 将所有 Docker Swarm 节点作为管理器运行的利弊?

mysql - 无法通过消息登录 docker phpmyadmin #2002

docker - 在 Windows 上通过 Chrome 查看 Tensorboard