1. 程式人生 > >docker部署nginx + tomcat

docker部署nginx + tomcat

  1. 查詢Docker Hub上的tomcat映象
docker search tomcat

這裡寫圖片描述

  1. 拉取官方上的映象到本地
docker pull tomcat
  1. 檢視本地的所有映象
docker images -a

這裡寫圖片描述

  1. 執行容器
    映象是靜態的,容器是動態的,容器是映象執行時的實體。映象(Image)和容器(Container)的關係,就像是面向物件程式設計中的 類 和 例項 一樣。
sudo docker run -d --name tomcat -v /usr/fin/tomcat/webapps:/usr/local/tomcat/webapps -v /usr/fin/tomcat/logs:/usr/local/tomcat/logs  -p 8081:8080

-v引數中,冒號":"前面的目錄是宿主機目錄,後面的目錄是容器目錄。

  1. ip:port 訪問tomcat
    在這裡插入圖片描述

遇到的問題:

【問題1】ip:port訪問tomcat提示"HTTP ERROR 404"
原因:-v /usr/fin/tomcat/webapps:/usr/local/tomcat/webapps : 宿主機目錄為空,把容器/usr/local/tomcat/webapps的目錄覆蓋了

解決辦法:
建立個/usr/fin/tomcat/webapps/ROOT/index1.html檔案

這樣tomcat就部署成功!!!

部署nginx

  1. 查詢nginx
docker search nginx
  1. 拉取倉庫映象到本地
docker pull nginx
  1. 執行nginx容器
sudo docker run -d --name nginx_web --volumes-from tomcat -v /usr/fin/nginx/logs:/var/log/nginx -v /usr/fin/nginx/html:/usr/share/nginx/html -p 80:80  nginx 
# 檢視執行容器
docker ps

在這裡插入圖片描述

  1. 進入nginx容器,修改nginx的配置引數
# 進入nginx容器
docker exec -ti mynginx /bin/bash

/etc/nginx/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;

    upstream test_nginx {
        server 123.207.255.182:8081;
    }
    
    server {
        listen  80;
        server_name  123.207.255.182;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            proxy_pass http://test_nginx;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }
    }

}

檢查nginx的配置檔案:/usr/sbin/nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

nginx的路徑找不到,用whereis nginx搜尋即可

  1. 通過nginx 訪問tomcat

在這裡插入圖片描述
這樣就可以通過80埠訪問tomcat了

遇到的問題:
nginx容器不能使用vim命令:
1)進入容器後用命令apt-get update下源庫
2)然後執行apt-get install vim命令

nginx 反向代理tomcat報400錯誤:
問題定位:
(1) nginx的/var/log/nginx/access.log,請求到nginx了
在這裡插入圖片描述
(2)檢視 tomcat的日誌資訊
在這裡插入圖片描述

解決辦法:
location中設定:proxy_set_header Host $http_host; 將頭資訊返回伺服器

如果後端真是的伺服器設定有類似防盜鏈或者根據http請求頭中的host欄位來進行路由或判斷功能的話
,如果反向代理層的nginx不重寫請求頭中的host欄位,將會導致請求失敗,報400錯誤,