美文网首页
Docker 安装Nginx 并挂在内容到宿主机

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

作者: 张小泰 | 来源:发表于2019-06-25 11:30 被阅读0次

    前提条件:已安装 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 并挂在内容到宿主机

          本文链接:https://www.haomeiwen.com/subject/ebhtcctx.html