Docker делит тома s3fs с помощью fuse: не может быть размонтирован или перемонтирован, если не используется --privileged

Я использую образ докера с именем "rancher-active-proxy". Это прокси, который автоматически создает / обновляет HTTPS-сертификаты.

Но так как его хранилище не распределено, а контейнер не использует удаленное хранилище, мы не можем его масштабировать (за балансировщиком нагрузки или чем-то еще).

Поэтому я пробую несколько вещей.

Что я тестирую:

  • proxy_container, создает свои файлы там, где хочет
  • s3fs_container, используется для монтирования корзины s3 и хранения файлов из proxy_container

У меня будет один прокси с правами записи на долгое время

docker-compose.yml для тестов

version: '2'
services:
  rancher-active-proxy:
    image: adi90x/rancher-active-proxy
    environment:
      CRON: 0 2 * * *
      DEBUG: 'true'
      DEFAULT_EMAIL: me@gmail.com
      DEFAULT_PORT: '80'
    stdin_open: true
    volumes:
      - /tmp/test/htpasswd:/etc/nginx/htpasswd:z
      - /tmp/test/vhost.d:/etc/nginx/vhost.d:z
      - /tmp/test/letsencrypt:/etc/letsencrypt:z
      - /tmp/test/certs:/etc/nginx/certs:z
    tty: true
    volumes_from:
      - s3fs:z
    ports:
      - 443:443/tcp
      - 80:80/tcp
  s3fs:
    image: s3fs:master
    cap_add:
      - SYS_ADMIN
      - MKNOD
    devices:
      - /dev/fuse
    security_opt:
      - apparmor:unconfined
      - seccomp:unconfined
    environment:
      AWS_ACCESS_KEY: ${AWS_ACCESS_KEY}
      AWS_ACCESS_SECRET_KEY: ${AWS_ACCESS_SECRET_KEY}
      AWS_BUCKET: ${BUCKET_NAME}
    volumes:
      - /tmp/test/htpasswd:/opt/s3fs/bucket:shared
      - /sys/fs/cgroup:/sys/fs/cgroup:ro

Два контейнера правильно делятся файлами и файлы загружаются на S3

s3fs dockerfile

FROM ubuntu:16.04

ENV S3FS_VERSION=v1.82 STORE=bucket

RUN apt-get update && \
    apt-get install -y \
        tree \
        automake \
        autotools-dev \
        fuse \
        g++ \
        git \
        libcurl4-gnutls-dev \
        libfuse-dev \
        libssl-dev \
        libxml2-dev \
        make \
        pkg-config \
        wget


WORKDIR /opt/s3fs

RUN mkdir s3fs-fuse && \
    ARCHIVE=${S3FS_VERSION}.tar.gz && \
    wget https://github.com/s3fs-fuse/s3fs-fuse/archive/$ARCHIVE && \
    tar xvzf $ARCHIVE -C s3fs-fuse --strip 1 && \
    cd s3fs-fuse && \
    ./autogen.sh && \
    ./configure  && \
    make && \
    make install && \
    cd - && rm -rf s3fs-fuse $ARCHIVE

RUN mkdir $STORE
ADD libs libs
ADD start.sh .

ENTRYPOINT [ "./start.sh" ]

точка входа start.sh

#!/bin/bash
echo $AWS_ACCESS_KEY:$AWS_ACCESS_SECRET_KEY > credentials
chmod 600 credentials

s3fs $AWS_BUCKET $STORE \
    -o dbglevel=info \
    -o passwd_file=credentials -d -d -f \
    -o curldbg \
    -o url="https://s3-eu-west-1.amazonaws.com" \
    -o endpoint="eu-west-1" \
    -o nonempty \
    -o allow_other \
    -o allow_root

Моя проблема

Когда я перезапускаю контейнеры, я получаю

ERROR: for s3fs  Cannot start service s3fs: linux mounts: lstat /home/potiron/test12: transport endpoint is not connected
ERROR: Encountered errors while bringing up the project.

Если я попытаюсь размонтировать

fusermount: entry for /home/potiron/test1 not found in /etc/mtab

С помощью --privileged не решает это.
Может быть, я неправильно использую флаг "z".. У вас есть идеи?

Спасибо за вашу помощь:).

0 ответов

Другие вопросы по тегам