我正在使用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
答案 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