Docker 安装Nginx 并挂在内容到宿主机

前提条件:已安装 docker

  1. 下载镜像
docker pull nginx
  1. 运行
docker run   -p 80:80 -d docker.io/nginx
  1. 检查允许情况
curl http://127.0.0.1
  1. 先停止指令
docker ps -a 
docker stop {imagesId}
docker rm {imagesId}
  1. 在宿主机上创建需要挂在的新建文件夹
mkdir -p /data/nginx/{conf, conf.d,html,logs}
  1. 新建配置文件
vim /data/nginx/conf/nginx.conf
  • 示例
user nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}

http {
    include      /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush    on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}
  • 新建配置文件
vim /data/nginx/conf.d/default.conf
  • 示例代码
server {
    listen      80; 
    server_name  localhost; 
    location / { 
        root  /usr/share/nginx/html; 
        index  index.html index.htm; 
        autoindex  on; 
    } 

    error_page  500 502 503 504  /50x.html; 

    location = /50x.html { 

        root  /usr/share/nginx/html; 

    } 

}
  • 新建一个开始页面
vim /data/nginx/html/index.html
vim /data/nginx/html/50x.html
  • 重新运行
docker run -p 80:80 -d -v 
/data/nginx/html:/usr/share/nginx/html -v /data/nginx/logs:/var/log/nginx -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf.d:/etc/nginx/conf.d docker.io/nginx

注意事项:default.conf 实际上所指向的目录为容器中的真实路径,而容器中的真实路径挂载在宿主机的真实路径上。如以上配置中宿主机中/data/nginx/conf/nginx.conf -> 容器中的 /etc/nginx/nginx.conf 故,在配置文件 default.conf /usr/share/nginx/html 实际上指向的目标为 /data/nginx/html

2019-07-31补充:
nginx 在实际docker 部署中,需要用到文件上传下载时会出现 文件过大,文件权限不足无法下载的问题。
解决办法:当出现 413 request Entity too Large 时
在 nginx 中配置

   client_header_buffer_size 32k;
   large_client_header_buffers 4 32k;
   client_max_body_size 1024m;
   client_body_buffer_size 10m;

如果不能解决,在server 中 再配置一遍,笔者在conf.d 对应的 api.conf 做了配置

upstream xxx.com {
  server 172.17.0.1:8082;
}
server {
  listen 80;
  # 关键部分
  client_max_body_size 100m;
  server_name xxx.com;
  location / {
    proxy_pass http://xxx.com;
  }
}

解决完上传问题之后,通过ngixn 下载文件的时候又遇到了下载权限不足的问题,然后按照以往的习惯在配置文件中修改了 user ,发现不起作用,原因是docker 容器的权限不足以访问宿主机的文件。
重新启动 docker 带上权限 --privileged=true 可以解决。

# 找到ngixn容器
docker ps 
# 停止容器
docker stop ngixn
# 删除容器
docker rm nginx 
# 重新运行
docker run -d -p 80:80 --privileged=true -v /data/nginx/html:/usr/share/nginx/html -v /data/nginx/logs:/var/log/nginx -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf.d:/etc/nginx/conf.d docker.io/nginx
# reload
 docker exec -i [nginx容器名/id] nginx -s reload

注意!

使用 docker 部署nginx 拿不到原始的ip地址,这个暂时没有办法解决.... 懂的朋友欢迎留言或者私信告知一下哦!

你可能感兴趣的:(Docker 安装Nginx 并挂在内容到宿主机)