首页 > 解决方案 > docker-compose 卷安装的只读文件系统错误

问题描述

我正在使用 docker-compose 作为哨兵内部安装的一部分。

下面是我的 docker-compose.yml 的 nginx 部分的片段。这是提供给我的 nginx 容器配置。您会注意到它有一个现有的卷安装。

nginx:
    << : *restart_policy
    ports:
      - '$SENTRY_BIND:80/tcp'
    image: 'nginx'
    volumes:
      - type: bind
        read_only: true
        source: ./nginx
        target: /etc/nginx
    depends_on:
      - web
      - relay

问题是我需要额外的挂载才能让我的 nginx 配置正常工作。我需要能够为 SSL 安装证书。当我对 nginx 部分进行以下修改时...

  nginx:
    << : *restart_policy
    ports:
      - '$SENTRY_BIND:80/tcp'
    image: 'nginx'
    volumes:
      - type: bind
        read_only: true
        source: ./nginx
        target: /etc/nginx
      - type: bind
        read_only: true
        source: ./certs
        target: /etc/nginx/certs
    depends_on:
      - web
      - relay
  relay:

...使用 docker-compose up -d 时出现以下错误:

Creating sentry_onpremise_nginx_1                                    ... error
Creating sentry_onpremise_ingest-consumer_1                          ... done
Creating sentry_onpremise_subscription-consumer-events_1             ... done
me/brad/repo/onpremise/certs" to rootfs at "/var/lib/docker/overlay2/357f60b96e866d8dd84d657f7cad55fad76420a61cc8cb35a10ebcb13bcf4060/merged/etc/nginx/certs" caused: mkdir /var/lib/docker/overlay2/357f60b96e866d8dd84d657f7cad55fad76420a61cc8cb35a10ebcb13bcf4060/merged/etc/nginx/certs: read-only file system: unknown

ERROR: for nginx  Cannot start service nginx: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: rootfs_linux.go:60: mounting "/home/brad/repo/onpremise/certs" to rootfs at "/var/lib/docker/overlay2/357f60b96e866d8dd84d657f7cad55fad76420a61cc8cb35a10ebcb13bcf4060/merged/etc/nginx/certs" caused: mkdir /var/lib/docker/overlay2/357f60b96e866d8dd84d657f7cad55fad76420a61cc8cb35a10ebcb13bcf4060/merged/etc/nginx/certs: read-only file system: unknown
ERROR: Encountered errors while bringing up the project.

任何帮助将不胜感激。我对 docker/compose 不是很有经验。

编辑:对于它的价值,当我运行docker exec -it sentry_onpremise_nginx_1 /bin/bash并尝试在容器内创建一个目录时,我遇到了类似的错误:

root@83afd0c563de:/etc/nginx# mkdir certs
mkdir: cannot create directory 'certs': Read-only file system

标签: dockerdocker-composesentry

解决方案


这是通过将 certs 目录放在 nginx 目录下解决的。坐骑相互冲突。首先使用 RO 挂载到 /etc/nginx 会阻止挂载到 /etc/nginx/certs,因为它试图附加到只读部分。


推荐阅读