运行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:
块,那么我需要在每次更改代码后重建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
并删除+重建所有内容(例如docker rmi [image]
,然后docker-compose up
重建我的docker-compose
图片)。这似乎对这个问题没有任何影响。
此时,我倾向于认为我设置# Use 'localhost' for the 'Common name'
openssl req -x509 -sha256 -nodes -newkey rsa:2048 -days 365 -keyout localhost.key -out localhost.crt
# Add the cert to your keychain
open localhost.crt
读写权限的方式有问题,但我没有找到任何关于我需要更改的明确文档
任何建议都将受到赞赏。
提前致谢。
答案 0 :(得分:4)
问题似乎是boot2docker的一个错误,以及它如何在OSX上安装卷。首先,我运行了命令docker inspect happy_passenger
。这给了我关于我的音量的以下信息:
"Mounts": [
{
"Source": "/Users/meow/test/www/demodocker",
"Destination": "/var/www/my_app",
"Mode": "rw",
"RW": true
}
],
当启用读/写(R / W)时,音量显示在docker中。在正常情况下,这表明我应该能够使用已安装的卷并写入文件系统。但是,由于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中问题的链接: