Разрешение отклонено при попытке запустить сервер rails в докере

Я пытаюсь запустить сервер rails в образе докера вместе с образом внешнего интерфейса mysql и vue. Я использую ruby ​​3 и rails 6. Образ mysql и внешнего интерфейса запускаются без проблем. Однако изображения рельсов не запускаются. У меня Macbook Pro с MacOS Monterey и Docker Desktop 4.5.0.

это мой docker-compose.yml:

version: "3"
services:
  mysql:
    image: mysql:8.0.21
    command:
      - --default-authentication-plugin=mysql_native_password
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=nauza_backend_development
    ports:
      - "3307:3306"
    volumes:
      - mysql:/var/lib/mysql

  backend:
    build:
      context: nauza-backend
      args:
        UID: ${UID:-1001}
    tty: true
    stdin_open: true
    command:
      bundle exec rails s -p 8080 -b '0.0.0.0'
    volumes:
      - ./nauza-backend:/usr/src/app
      # attach a volume at /bundle to cache gems
      - bundle:/bundle
      # attach a volume at ./node_modules to cache node modules
      - node-modules:/usr/src/app/node_modules
      # attach a volume at ./tmp to cache asset compilation files
      - tmp:/usr/src/app/tmp
    environment:
      - RAILS_ENV=development
    ports:
      - "8080:8080"
    depends_on:
      - mysql
    user: rails
    environment:
      - RAILS_ENV=development
      - MYSQL_HOST=mysql
      - MYSQL_USER=root
      - MYSQL_PASSWORD=root
  frontend:
    build:
      context: nauza-frontend
      args:
        UID: ${UID:-1001}
    volumes:
      - ./nauza-frontend:/usr/src/app
    ports:
      - "3000:3000"
    user: frontend
volumes:
  bundle:
    driver: local
  mysql:
    driver: local
  tmp:
    driver: local
  node-modules:
    driver: local

и это мой Dockerfile:

FROM ruby:3.0.2

ARG UID
RUN adduser rails --uid $UID --disabled-password --gecos ""

ENV APP /usr/src/app
RUN mkdir $APP
WORKDIR $APP

ENV EDITOR=vim

RUN apt-get update \
    && apt-get install -y \
        nmap \
        vim

COPY Gemfile* $APP/
RUN bundle install -j3 --path vendor/bundle

COPY . $APP/

CMD ["rails", "server", "-p", "8080", "-b", "0.0.0.0"]

когда я пытаюсь запустить это с помощью docker-compose up на своем Mac, я получаю следующую ошибку:

/usr/local/lib/ruby/3.0.0/fileutils.rb:253:in `mkdir': Permission denied @ dir_s_mkdir - /usr/src/app/tmp/cache (Errno::EACCES)

Любые идеи о том, как это исправить?

Моим первым шагом здесь было бы удалить все volumes:, кроме хранилища данных MySQL: вам не нужно хранить свой код в томах, запуск его из образа — это нормальный подход. Вам не нужно переопределять user: во время выполнения или передавать определенный идентификатор пользователя в процесс сборки. Если у вас нет монтирования тома, ваш Dockerfile может RUN chown убедиться, что пользователь без полномочий root может записывать во временный каталог.

David Maze 16.03.2022 14:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удалите строку - tmp:/usr/src/app/tmp в вашем Dockerfile.

Я бы сказал, вам не нужно получать доступ к временным файлам вашего контейнера. ?

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