首页 > 解决方案 > 运行 docker-compose up 后,Nginx 容器不会构建(卷设备问题)

问题描述

编辑:对于那些在 Mac 上工作的人,如果您收到以下消息,那是因为您没有指向主机上的正确文件路径。我正在努力确保所有内容都在本地构建/运行,但最终这将托管在 Digital Ocean 上的 linux 机器上,我将不得不更改文件路径。

最初,我不了解 Volumes 背后的功能,但这段视频确实澄清了问题:https ://www.youtube.com/watch?v=p2PH_YPCsis


我目前正在编写一个 Docker Compose YAML 文件来运行 Node.js 应用程序、MongoDB 和 Nginx 等服务。在构建应用程序和数据库时,网络服务器给了我错误:

错误:对于 webserver 无法启动服务 webserver: b'Mounts denied: \r\n路径 /User/alan/test\r\nis 未从 OS X 共享,并且不为 Docker 所知。\r\n您可以从Docker -> 首选项... -> 文件 S

我不太确定为什么它会给我这个错误,但我知道它与volumes/web-root/driver_opts/device音量有关。

谁能指出我正确的方向?

docker-compose.yml

version: '3'

services:
  nodejs:
    build: 
      context: .
      dockerfile: Dockerfile
    image: nodejs
    container_name: nodejs
    restart: unless-stopped
    env_file: .env
    environment:
      - MONGO_USERNAME=$MONGO_USERNAME
      - MONGO_PASSWORD=$MONGO_PASSWORD
      - MONGO_HOSTNAME=db
      - MONGO_PORT=$MONGO_PORT
      - MONGO_DB=$MONGO_DB 
    ports:
      - "81:8080"
    depends_on: 
      - db
    volumes:
      - .:/home/node/app
      - node_modules:/home/node/app/node_modules
    networks:
      - app-network
    command: ./wait-for.sh db:27017 -- /home/node/app/node_modules/.bin/nodemon index.js

  db:
    image: mongo:4.1.8-xenial
    container_name: db
    restart: unless-stopped
    env_file: .env
    environment:
      - MONGO_INITDB_ROOT_USERNAME=$MONGO_USERNAME
      - MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASSWORD
    volumes:  
      - dbdata:/data/db   
    networks:
      - app-network  
    ports:
      - "27017:27017"

  webserver:
    image: nginx:mainline-alpine
    container_name: webserver
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - web-root:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/nginx.conf
      - certbot-etc:/etc/letsencrypt
      - certbot-var:/var/lib/letsencrypt
    depends_on:
      - nodejs
      - db
    networks:
      - app-network

  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - certbot-var:/var/lib/letsencrypt
      - web-root:/var/www/html
    depends_on:
      - webserver
    command: certonly --webroot --webroot-path=/var/www/html --email boyce.alan15@gmail.com --agree-tos --no-eff-email --staging -d bittap.io  -d www.bittap.io

volumes:
  certbot-etc:
  certbot-var:
  web-root:
    driver: local
    driver_opts:
      type: none
      device: /User/alan/test
      o: bind
  dbdata:
  node_modules:  

networks:
  app-network:
    driver: bridge

标签: dockernginxcertbot

解决方案


根据您的错误消息,您正在运行 macOS 和 Docker 4 Mac。

正如Devid Maze 所说,您在device:卷的属性中犯了错误。

像这样更新volumes部分:

volumes:
  certbot-etc:
  certbot-var:
  web-root:
    driver: local
    driver_opts:
      type: none
      device: /Users/alan/test
      o: bind

清除所有内容并重试。


推荐阅读