【问题标题】:Docker/Rails - Permission denied @ dir_s_mkdir Errno::EACCESSDocker/Rails - 权限被拒绝 @ dir_s_mkdir Errno::EACCESS
【发布时间】:2017-02-22 01:27:53
【问题描述】:

使用 Docker,我想建立一个可以制作的环境 更改本地文件,而容器服务于所述文件。

但是,在运行 docker-compose run web 后,我遇到了以下错误:

=> Booting WEBrick
=> Rails 5.0.0.1 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
Exiting
/usr/local/lib/ruby/2.3.0/fileutils.rb:253:in `mkdir': Permission denied @ dir_s_mkdir - /usr/src/app/tmp (Errno::EACCES)
        from /usr/local/lib/ruby/2.3.0/fileutils.rb:253:in `fu_mkdir'
        from /usr/local/lib/ruby/2.3.0/fileutils.rb:227:in `block (2 levels) in mkdir_p'
        from /usr/local/lib/ruby/2.3.0/fileutils.rb:225:in `reverse_each'
        from /usr/local/lib/ruby/2.3.0/fileutils.rb:225:in `block in mkdir_p'
        from /usr/local/lib/ruby/2.3.0/fileutils.rb:211:in `each'
        from /usr/local/lib/ruby/2.3.0/fileutils.rb:211:in `mkdir_p'
        from /usr/local/bundle/gems/railties-5.0.0.1/lib/rails/commands/server.rb:119:in `block in create_tmp_directories'
        from /usr/local/bundle/gems/railties-5.0.0.1/lib/rails/commands/server.rb:118:in `each'
        from /usr/local/bundle/gems/railties-5.0.0.1/lib/rails/commands/server.rb:118:in `create_tmp_directories'
        from /usr/local/bundle/gems/railties-5.0.0.1/lib/rails/commands/server.rb:75:in `start'
        from /usr/local/bundle/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:90:in `block in server'
        from /usr/local/bundle/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:85:in `tap'
        from /usr/local/bundle/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:85:in `server'
        from /usr/local/bundle/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
        from /usr/local/bundle/gems/railties-5.0.0.1/lib/rails/commands.rb:18:in `<top (required)>'
        from bin/rails:4:in `require'
        from bin/rails:4:in `<main>'

驱动器在 Docker 设置上共享,我的 Windows 帐户是管理员,我运行这些命令的 PowerShell 以管理员身份运行,容器的用户是 root,所以我真的找不到它缺少哪个权限.

我正在使用带有 Hyper-v 驱动程序的 Docker for Windows,以及以下 Dockerfiledocker-compose.yml 在应用程序的目录中:

Dockerfile

# Official Ubuntu image with Ruby installed
FROM ruby:2.3.0

# Update package lists and install dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    postgresql-client \
    nodejs \
    sqlite3 \
    libqt4-webkit \
    libqt4-dev \
    xvfb \
  && rm -rf /var/lib/apt/lists/*

# Define where the application will live inside the image
ENV APP_HOME /usr/src/app

# Create the application folder
RUN mkdir -p $APP_HOME

# Set the working directory inside the image
WORKDIR $APP_HOME

# Add Gemfile and install dependencies
COPY Gemfile* $APP_HOME/
RUN bundle install

# Copy local folder to work directory
COPY . $APP_HOME

docker-compose.yml

version: '2'
services:
  web:
    privileged: true
    build: .
    command: bundle exec rails server -p 3000 -b '0.0.0.0'
    volumes:
      - .:/usr/src/app
    ports:
      - "3000:3000"

【问题讨论】:

    标签: ruby-on-rails windows docker docker-compose dockerfile


    【解决方案1】:

    @Filipe 您能否确认您的用户是否具有对目录“.”的写入权限?在窗户上?由于 samba 集成,以管理员身份运行并不能保证对已安装卷的完全读/写访问权限。

    【讨论】:

    • 谢谢罗伯托,不是专门针对这个问题,而是在与容器(在 C:/Users 上)共享卷时,我必须给自己这些权限。 Windows 上的管理员权限非常令人困惑...
    【解决方案2】:

    我遇到的问题是由于另一个 docker 安装中的旧 docker-machine 失败,我当时忘记删除它,并且没有意识到它在新安装时仍然存在。

    删除并创建一个新的docker-machine,添加virtual switchaccording to official documentation后,我就没有权限问题了。

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2015-07-20
      • 2016-03-14
      • 2015-12-06
      • 2016-05-07
      • 2018-12-13
      • 2015-12-18
      • 2017-06-28
      • 2016-12-28
      相关资源
      最近更新 更多