基于NGINX的样本网站在一个容器中

时间:2015-11-02 06:36:11

标签: nginx docker

我正在使用Docker并尝试使用James Turnbull的书来创建一个具有工作nginx的容器。创建并运行容器后,我尝试访问公共端口上的HTML页面,但我已获得403 Forbidden状态代码。 Dockerfile在这里:

FROM ubuntu:14.04

RUN apt-get -yqq update && apt-get -yqq install nginx

RUN mkdir -p /var/www/html/website
ADD nginx/global.conf /etc/nginx/conf.d/
ADD nginx/nginx.conf /etc/nginx/

EXPOSE 80

global.conf

server {
        listen          0.0.0.0:80;
        server_name     _;

        root            /var/www/html/website;
        index           index.html index.htm;

        access_log      /var/log/nginx/default_access.log;
        error_log       /var/log/nginx/default_error.log;
}

nginx.conf

user www-data;
worker_processes 4;
pid /run/nginx.pid;
daemon off;

events {  }

http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;
  include /etc/nginx/mime.types;
  default_type application/octet-stream;
  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;
  gzip on;
  gzip_disable "msie6";
  include /etc/nginx/conf.d/*.conf;
}

我使用上面的命令来运行新容器:

sudo docker run -d -p 80 --name website -v $PWD/website:/var/www/html/website:rw user007/website nginx

3 个答案:

答案 0 :(得分:0)

我怀疑nginx用户对文件没有读取权限。解决此问题的最简单方法是在卷上运行chmod -R a+r。请注意,这将允许任何用户阅读文件。

此外,nginx用户需要对所有父目录拥有execute权限。

答案 1 :(得分:0)

如果验证端口转发是否正常运行?(这意味着错误来自主机操作系统)

也许..你需要编辑你的命令。

sudo docker run -d -p 80>> sudo docker run -d -p 80:80

答案 2 :(得分:0)

  

由SELinux引起。

     

将卷与Docker一起使用会导致SELinux出现问题。

     

有关完整故事,请参阅此link

     

当使用SELinux来控制容器中的进程时,您需要确保将容量装入容器的任何内容都是可读的,并且可能是可写的,具体取决于用例。

您可以通过运行来暂时发出:

su -c "setenforce 0"
  

由于Docker最终在docker> 1.7

中合并了一个补丁,因此最近变得容易了      

此补丁添加了对“z”和“Z”的支持,作为卷安装(-v)上的选项。

     

例如:

docker run -d -p 80 --name website -v $PWD/website:/var/www/html/website:z user007/website nginx

将自动执行

chcon -Rt svirt_sandbox_file_t /var/db