Phusion Passenger和Docker-Compose问题与权限

时间:2015-08-23 17:28:13

标签: docker 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:块,那么我需要在每次更改代码后重建docker镜像。所以这个选项不起作用。

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

  3. 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 读写权限的方式有问题,但我没有找到任何关于我需要更改的明确文档

    任何建议都将受到赞赏。

    提前致谢。

1 个答案:

答案 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 appRUN usermod -G staff app后,我在使用docker-compose up时能够成功加载我的容器化应用程序。

希望这有助于某人修复其docker权限错误/ docker挂载量错误。

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

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

相关问题