docker - 运行 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
解决方案
根据您的错误消息,您正在运行 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
清除所有内容并重试。
推荐阅读
- php - 使用php生成证书签名请求时证书和私钥不匹配
- php - 当控制器位于子文件夹中时,kohana 3.2.3.1 路由不起作用
- javascript - 在 React 中将功能组件从子级传递给父级
- algorithm - 文件转换器一般如何工作,例如 word 到 pdf、XML 到 json、word 到 txt 等
- docker - 在 SWARM 中无法从工作节点访问服务
- django - 来自客户端的请求以数组形式出现,如何使用 Django REST 框架过滤器处理它
- build - 使用 --aot 的 Angular 构建失败并出现 'ɵbl'(导入为 'i1')未找到
- c - 在我的情况下,由 char (getc) 读取或由块读取 (fgets) 更有效的是什么
- python-3.x - 没有名为“nornir_utils”的模块
- python - 如何从终端运行 FastAPI?