docker部署nginx + tomcat
阿新 • • 發佈:2018-12-22
- 查詢Docker Hub上的tomcat映象
docker search tomcat
- 拉取官方上的映象到本地
docker pull tomcat
- 檢視本地的所有映象
docker images -a
- 執行容器
映象是靜態的,容器是動態的,容器是映象執行時的實體。映象(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引數中,冒號":"前面的目錄是宿主機目錄,後面的目錄是容器目錄。
- 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
- 查詢nginx
docker search nginx
- 拉取倉庫映象到本地
docker pull nginx
- 執行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
- 進入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搜尋即可
- 通過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錯誤,