Phusion Passenger和Docker-Compose问题与权限

运行docker-compose和Phusion Passenger的docker图像时遇到权限问题。

具体来说,错误是: Permission denied @ rb_sysopen - /var/www/my_app/tmp/.....

docker-compose.yml文件包含以下信息:

 happy_passenger: build: . container_name: happy_passenger ports: - "80:80" volumes: - .:/var/www/my_app links: - redis redis: container_name: my_redis image: redis ports: - "6379:6379" 

当运行docker-compose up ,应用程序加载,但是我遇到了Permission denied @ rb_sysopen错误。


我的Dockerfile也是比较简单的:

 # Dockerfile FROM phusion/passenger-ruby21:0.9.17 MAINTAINER meoww- "none@none.com" # Set correct environment variables. ENV HOME /root # Initialize "in production" ENV RAILS_ENV production # Use baseimage-docker's init process. CMD ["/sbin/my_init"] # Turn on Nginx RUN rm -f /etc/service/nginx/down # Remove the default site that comes with Nginx RUN rm /etc/nginx/sites-enabled/default ADD nginx.conf /etc/nginx/sites-enabled/my_app.conf WORKDIR /tmp ADD Gemfile /tmp/ ADD Gemfile.lock /tmp/ RUN bundle install ADD . /var/www/my_app RUN chown -R app:app /var/www/my_app # Clean up APT when done. RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

故障排除

  1. 当我修改我docker-compose.yml文件并删除volumes:块时,我可以查看我的应用程序。 不幸的是,如果我没有volumes: block,那么我需要在每次更改代码后重新编译docker镜像。 所以这个选项是行不通的。

  2. 我注意到,当应用程序启动时,我也看到一个权限错误:

App 66 stderr: Rails Error: Unable to access log file. Please ensure that /var/www/my_app/log/development.log exists and is writable (ie, make it writable for user and group: chmod 0664 /var/www/my_app/log/development.log)

根据上面的错误(#2),我尝试添加一个RUN chmod -R 0664 /var/www/my_app到我的Dockerfile并删除+重build所有东西(例如Dockerfile docker rmi [image] ,然后docker-compose up重build我的图片) 。 这似乎对这个问题没有任何影响。


在这一点上,我倾向于认为我设置docker-compose读写权限的方式有问题,但是我没有find任何需要更改的明确文档。

任何意见,将不胜感激。

提前致谢。

看来,问题是boot2docker的一个错误,以及它如何在OSX上挂载卷。 首先,我运行命令docker inspect happy_passenger 。 这给了我关于我的音量的以下信息:

 "Mounts": [ { "Source": "/Users/meow/test/www/demodocker", "Destination": "/var/www/my_app", "Mode": "rw", "RW": true } ], 

该容器在Docker中显示为启用了读/写(R / W)。 在正常情况下,这将表明我应该能够使用装入的卷并写入文件系统。 但是,由于R / W权限存在一个错误,由于权限错误,我遇到了各种错误。 即使运行chmod -R 777 . 在共享和主机目录没有解决问题

为了解决这个问题,我做了以下几点:

在我的dockerfile

 # Dockerfile FROM phusion/passenger-ruby21:0.9.17 MAINTAINER meoww- "none@none.com" # Hack to get around the boot2docker issue. RUN usermod -u 1000 app RUN usermod -G staff app 

在添加了两个命令后, RUN usermod -u 1000 appRUN usermod -G staff app我能够成功加载我的集装箱应用程序时,使用docker-compose up

希望这可以帮助某人修复他们的docker许可错误/docker挂载音量错误。

另外,这里是Github的问题链接:

https://github.com/boot2docker/boot2docker/issues/581