docker - docker-compose 错误“只读文件系统”
问题描述
我设计了一个docker-compose.yml
文件,它也应该与单个卷一起使用....
我创建了一个安装/dataraid
在我的系统上的 raid-drive。我可以读/写系统,但是在我的撰写文件中使用它时,我收到read-only file system
错误消息.....将卷调整到其他路径,如/home/myname/test
撰写文件工作....
我不知道是什么/dataraid
使它“只读”。
撰写文件需要什么权限设置?
错误信息:
ERROR: for db Cannot start service db: error while creating mount source path '/dataraid/nextcloud/mariadb': mkdir /dataraid: read-only file system
撰写:
version: '3'
services:
db:
image: mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- /dataraid/nextcloud/mariadb:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=PASSWORD
env_file:
- db.env
redis:
image: redis
restart: always
app:
image: nextcloud:fpm
restart: always
volumes:
- /dataraid/nextcloud/html:/var/www/html
environment:
- MYSQL_HOST=db
env_file:
- db.env
depends_on:
- db
- redis
web:
build: ./web
restart: always
volumes:
- /dataraid/nextcloud/html:/var/www/html:ro
environment:
- VIRTUAL_HOST=name.de
- LETSENCRYPT_HOST=name.de
- LETSENCRYPT_EMAIL=x@y.de
depends_on:
- app
ports:
- 4080:80
networks:
- proxy-tier
- default
collabora:
image: collabora/code
expose:
- 9980
cap_add:
- MKNOD
environment:
- domain=name.de
- VIRTUAL_HOST=name.de
- VIRTUAL_PORT=9980
- VIRTUAL_PROTO=https
- LETSENCRYPT_HOST=name.de
- LETSENCRYPT_EMAIL=x@y.de
- username= #optional
- password= #optional
networks:
- proxy-tier
restart: always
cron:
build: ./app
restart: always
volumes:
- /dataraid/nextcloud/html:/var/www/html
entrypoint: /cron.sh
depends_on:
- db
- redis
proxy:
build: ./proxy
restart: always
ports:
- 443:443
- 80:80
environment:
- VIRTUAL_PROTO=https
- VIRTUAL_PORT=443
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
volumes:
- /dataraid/nextcloud/nginx-certs:/etc/nginx/certs:ro
- /dataraid/nextcloud/nginx-vhost.d:/etc/nginx/vhost.d
- /dataraid/nextcloud/nginx-html:/usr/share/nginx/html
- /dataraid/nextcloud/nginx-conf.d:/etc/nginx/conf.d
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- proxy-tier
letsencrypt-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
restart: always
volumes:
- /dataraid/nextcloud/nginx-certs:/etc/nginx/certs
- /dataraid/nextcloud/nginx-vhost.d:/etc/nginx/vhost.d
- /dataraid/nextcloud/nginx-html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy-tier
depends_on:
- proxy
networks:
proxy-tier:
查看错误消息:
bernd@sys-dock:/dataraid/Docker-Configs/nextcloud$ docker-compose up -d
Creating network "nextcloud_default" with the default driver
Creating network "nextcloud_proxy-tier" with the default driver
Creating nextcloud_db_1 ...
Creating nextcloud_proxy_1 ... error
Creating nextcloud_db_1 ... error
Creating nextcloud_collabora_1 ...
ERROR: for nextcloud_proxy_1 Cannot start service proxy: error while creating mount source path '/dataraid/nextcloud/nginx-certs': mkdir /dataraid: read-only file system
Creating nextcloud_redis_1 ... done
Creating nextcloud_collabora_1 ... done
ERROR: for proxy Cannot start service proxy: error while creating mount source path '/dataraid/nextcloud/nginx-certs': mkdir /dataraid: read-only file system
ERROR: for db Cannot start service db: error while creating mount source path '/dataraid/nextcloud/mariadb': mkdir /dataraid: read-only file system
ERROR: Encountered errors while bringing up the project.
解决方案
如果 docker 在文件系统挂载之前启动,您可能会看到 docker 引擎尝试写入父文件系统的问题。您可以重新启动 docker 守护程序以排除这种情况(systemctl restart docker
在 systemd 基础环境中)。
如果重新启动守护进程有帮助,那么您可以在 docker 引擎和外部文件系统挂载之间添加依赖关系。在 systemd 中,这涉及到After=
单元文件中的一个子句。例如,您可以创建一个包含以下内容的/etc/systemd/system/docker.service.d/override.conf
文件:
[Unit]
After=nfs-client.target
(请注意,我不确定这nfs-client.target
是您文件系统的正确单元文件,您需要检查它的安装位置。)
我最近看到人们遇到的另一个问题是基于 Snap 的 docker installs,它在另一种容器技术中运行 docker,这将阻止访问未在 Snap 中明确配置的路径。
推荐阅读
- linux - 使用 FROM 中的参数构建 docker 映像失败
- assembly - 什么决定了内存重映射操作后的位置无关性?
- sharepoint - SPFX webpart 在 IE 11 中不工作显示“反射未定义”
- java - JGit 到 Github Blob 对象 SHA1 一致性
- python - Python 多线程日志记录
- javascript - 如何添加翻译到
React Admin 中的验证? - reactjs - 在 React 中使用另一个上下文中的上下文
- finite-automata - 输入遵循确定性有限自动机接受的语言的描述
- parsing - 为什么 ANTLR 生成的解析器没有解析/启动/开始功能?
- c# - .Single(c.=>c.Id==id) 方法返回 NULL