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/*
故障排除
-
当我修改我
docker-compose.yml
文件并删除volumes:
块时,我可以查看我的应用程序。 不幸的是,如果我没有volumes:
block,那么我需要在每次更改代码后重新编译docker镜像。 所以这个选项是行不通的。 -
我注意到,当应用程序启动时,我也看到一个权限错误:
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 app
和RUN usermod -G staff app
我能够成功加载我的集装箱应用程序时,使用docker-compose up
。
希望这可以帮助某人修复他们的docker许可错误/docker挂载音量错误。
另外,这里是Github的问题链接: