首页 > 解决方案 > 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.

标签: dockerdocker-compose

解决方案


如果 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 中明确配置的路径。


推荐阅读