首页 > 解决方案 > Docker - Permission denied @ rb_sysopen - 覆盖卷的映像安装路径 - 未反映更改

问题描述

尝试使用dockerfile和运行我的容器时,尝试在 Ubuntu 上对此权限错误进行排序docker-compose.yml

Exiting
/usr/local/bundle/gems/rack-2.2.3/lib/rack/server.rb:433:in `initialize': Permission denied @ rb_sysopen - /home/api/limpar/current/tmp/pids/server.pid (Errno::EACCES)

Dockerfile

FROM ruby:2.7.1

ENV LANG C.UTF-8
ENV NODE_VERSION 12
ENV NODE_ENV production
ENV INSTALL_PATH /home/api/limpar/current

.
(...)

RUN mkdir -p $INSTALL_PATH
WORKDIR $INSTALL_PATH

COPY Gemfile Gemfile.lock ./
RUN gem install bundler
RUN bundle install

COPY . $INSTALL_PATH

RUN rm -rf tmp

RUN useradd -Ms /bin/bash api -u 1001
RUN chown -R api:api /home/api /usr/local/bundle
USER api


EXPOSE 3000
CMD rails server -p 3000 -b 0.0.0.0

码头工人-compose.yml

    api:
      container_name: limpar-api
      image: limpar-api
      build: .
      command: bundle exec rails s -p 3000 -b '0.0.0.0'
      env_file:
        - .env
      volumes:
        - ./:/home/api/limpar/current
      ports:
        - "3000:3000"
      depends_on:
        - db
        - redis
      networks:
        - limpar_network
    

docker build运行没有失败。Dockerfileinstal_path 覆盖docker-compose文件上的卷位置。通过更改我的 docker-compose.yml 文件上的卷名, I am able to fix the permission errors.

但是,我的代码上的本地更改不再得到反映,这意味着我每次更改任何内容时都必须重新构建。

Dockerfile 上关于用户权限的任何缺失点?提前致谢

标签: dockerdocker-compose

解决方案


添加

USER root

到 Docker 文件,RUN chown...修复了权限问题,并允许我在 dockerfile 和 docker-compose 卷上保持相同的路径,解决本地代码更改未反映的问题。


推荐阅读