使用docker-compose挂载卷时出现只读文件系统错误

3

我正在使用docker-compose作为Sentry On-Premise安装的一部分。

以下是我的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

你的主机系统是否有一个 ./nginx/certs 目录(即使它是空的)? - David Maze
是的,它确实会。目录也被填充了。 - Kongmingtwo
df -hPT 返回什么? - Eduard Voiculescu
由于内容过长,无法在评论框中展示,请查看以下链接中的翻译文本:https://0bin.net/paste/i0+kx-Kn#T2dZGbkHJXjzmXfH-ze/ZHMquS2hGRfkKdPjhcuyG2r - Kongmingtwo
在主机上:您使用哪个用户并且是否具有Docker的权限? - Facty
在生产环境中,有一个Docker组,我是其中的成员。在这个测试机器上,Docker是通过sudo运行的。然而,无论是生产环境还是测试环境都遇到了同样的问题。 - Kongmingtwo
2个回答

4
将证书目录放在 nginx 目录下解决了问题。挂载之间发生了冲突。首先,以 RO 方式挂载到 /etc/nginx,然后将挂载尝试附加到只读部分的 /etc/nginx/certs 挂载被阻塞。

-2

您可以使用--privileged参数创建/运行容器。

像这样:

docker run --privileged -i --name master --hostname k8s-master -d ubuntu:20.04

这肯定不是最好的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接