docker-stack.yml无效的卷类型绑定

时间:2017-03-13 17:38:20

标签: docker docker-compose docker-swarm

这是我的docker-stack.yml文件

    version: "3"

    services:
      mysql:
        image: mysql:latest
        deploy:
          replicas: 1
          update_config:
            parallelism: 1
          restart_policy:
            condition: on-failure
        ports:
          - "3306:3306"
        environment:
          MYSQL_ROOT_PASSWORD: <Censored>
          MYSQL_USER: <Censored>
          MYSQL_PASSWORD: <Censored>
        volumes:
          - ./db/data:/var/lib/mysql
          - ./db/logs:/var/log/mysql
          - ./db/config:/etc/mysql/conf.d
      php:
        image: wiput1999/php
        volumes:
          - ./web:/web
      nginx:
        image: nginx:latest
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - ./code:/code:ro
          - ./site.conf:/etc/nginx/conf.d/default.conf
          - /etc/letsencrypt:/etc/letsencrypt
          - ./nginx/log:/var/log/nginx

当我运行以下堆栈时,我得到了mysql和nginx这个错误 &#34;类型&#34;无效的mount配置;绑定&#34;:绑定源路径不存在&#34;

我不知道我的代码有什么问题。

2 个答案:

答案 0 :(得分:10)

bind是一种挂载,用于将主机上的目录(或文件)挂载到容器中。你的所有卷都是这样设置的。因此,您的某个源目录(或文件)在主机上不存在。检查以下各项:

  • ./分贝/数据
  • ./分贝/日志
  • ./分贝/配置
  • ./网络
  • ./代码
  • ./ site.conf
  • 的/ etc / letsencrypt
  • ./ nginx的/日志

您可以执行ls -ld ./db/data ./db/logs ./db/config ./web ./code ./site.conf /etc/letsencrypt ./nginx/log >/dev/null并查看错误消息以找出哪一个。

答案 1 :(得分:5)

请考虑使用docker configs和docker secret来代替卷。

version: "3.3"

services:
  nginx:
    configs:
      - source: nginx_vhost
        target: /etc/nginx/conf.d/default.conf
    secrets:
      - ssl_private_key
...

configs:
  nginx_vhost:
    file: ./site.conf

secrets:
  ssl_private_key:
    file: /etc/letsencrypt/private.key

https://docs.docker.com/engine/swarm/configs/https://docs.docker.com/compose/compose-file/#configs