摘要:重啟后,不但轉發策略失效,重新執行轉發命令后仍舊不能訪問。方案稍后整理發布。第三輪投產時,通過和一線溝通,得知客戶這邊的策略是生產一律關閉防火墻。不過對于端口的綁定,被真實商業環境折磨許久,研究分析實現了種種可能。
前言
之前寫過 tomcat 單機多實例,最后解決 80 端口訪問用的是 iptables 轉發;
第三輪投產前,客戶做了遷移和擴容。重啟后,不但轉發策略失效,重新執行轉發命令后仍舊不能訪問 80。后來我還發現是徹底關閉了防火墻。后來經研究,通過打開防火墻,配置自定義防火墻函數保存iptables策略,解決了 iptables 轉發重啟失效的問題;方案也提交了客戶。方案稍后整理發布。
第三輪投產時,通過和一線溝通,得知客戶這邊的策略是生產一律關閉防火墻。so strange!但是,還得想辦法不是?總不能說這個系統必須得開防火墻吧?通過研究實驗和請教大神,最終搞定。整理如下。
# 進入docker容器啟動tomcat root@40f7130d7832:/usr/local/tomcat/bin# ./startup.sh # get tomcat對應java進程: root@40f7130d7832:/usr/local/tomcat/bin# ps -ef | grep java # 添加kch用戶 root@40f7130d7832:/usr/local# # groupadd kch && useradd -d /kch -g kch -m kch && passwd kch # 更改tomcat屬主為kch root@40f7130d7832:/usr/local# chown -R kch.kch tomcat # 賦予 tomcat對應java進程 u+s 權限 (進程只能是exe,不能是腳本):普通用戶訪問時,臨時使進程具有root權限可以綁定80端口 root@40f7130d7832:/usr/local# chmod u+s /docker-java-home/jre/bin/java實驗如下
本能就用官方 tomcat7 鏡像。沒有的自行 pull 一個
docker pull tomcat:7.0
默認是 8080 端口的,啟動命令
docker run --name w1 -it -p 8080:8080 tomcat:7.0 /bin/bash
這里我們需要綁定 80 端口,所以啟動命令見下文,且需要修訂 server.xml,把 tomcat 的端口由 8080 改為 80;
啟動 Tomcat 鏡像ChinaDreams:workspace kangcunhua$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE .... tomcat 7.0 3402a4bb8ae6 4 months ago 357MB .... ChinaDreams:workspace kangcunhua$ docker run --name www -it -p 80:80 tomcat:7.0 /bin/bash root@40f7130d7832:/usr/local/tomcat# cd bin root@40f7130d7832:/usr/local/tomcat/bin# ./startup.sh root@40f7130d7832:/usr/local/tomcat/bin# ps -ef | grep java root 12 1 37 15:12 pts/0 00:00:05 /docker-java-home/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start root 56 1 0 15:12 pts/0 00:00:00 grep java root@40f7130d7832:/usr/local/tomcat/bin# curl localhost:8080 ... root@40f7130d7832:/usr/local/tomcat/bin#
get 到 tomcat 的進程(exe):/docker-java-home/jre/bin/java。注:這里查詢記下來的,必須是進程(exe),不能是腳本。后續有用;
修改 server.xmlChinaDreams:workspace kangcunhua$ docker cp www:/usr/local/tomcat/conf/server.xml . ChinaDreams:workspace kangcunhua$ vi server.xml ChinaDreams:workspace kangcunhua$ docker cp server.xml www:/usr/local/tomcat/conf/
將默認的 8080 改成 80
找到
修改為
新建 prms 用戶 對應容器已新建 prms 用戶
root@40f7130d7832:/usr/local# # groupadd kch && useradd -d /kch -g kch -m kch root@40f7130d7832:/usr/local# # passwd kch更改 tomcat 屬主root@40f7130d7832:/usr/local# ls -la drwxr-sr-x 14 root staff 4096 Dec 18 15:12 tomcat root@40f7130d7832:/usr/local# chown -R kch.kch tomcat root@40f7130d7832:/usr/local# ls -la drwxr-sr-x 20 kch kch 4096 Dec 18 15:22 tomcat root@40f7130d7832:/usr/local#啟動
發現可以正常啟動,但是不能訪問80端口;$ ./startup.sh ... Tomcat started. $ curl localhost curl: (7) Failed to connect to localhost port 80: Connection refused $ ./shutdown.sh修訂 java 的屬主root@40f7130d7832:/usr/local# ls -la /docker-java-home/jre/bin/java -rwxr-xr-x 1 root root 6408 May 19 2017 /docker-java-home/jre/bin/java root@40f7130d7832:/usr/local# chmod u+s /docker-java-home/jre/bin/java root@40f7130d7832:/usr/local# ls -la /docker-java-home/jre/bin/java -rwsr-xr-x 1 root root 6408 May 19 2017 /docker-java-home/jre/bin/java啟動 tomcat正常啟動,且可以訪問 80 端口
通過瀏覽器http://localhost也可以訪問,看到tomcat首頁;
root@40f7130d7832:/usr/local# su kch $ ./startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /docker-java-home/jre Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. $ curl localhost ... $收尾 提交鏡像docker commit www tomcat-bind80:7.0提交 dockerhubChinaDreams:workspace kangcunhua$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat-bind80 7.0 c6e1013adaf9 6 seconds ago 374MB ChinaDreams:workspace kangcunhua$ docker tag c6e1013adaf9 aninputforce/tomcat7-bind80:latest ChinaDreams:workspace kangcunhua$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat-bind80 7.0 c6e1013adaf9 2 minutes ago 374MB aninputforce/tomcat7-bind80 latest c6e1013adaf9 2 minutes ago 374MB ChinaDreams:workspace kangcunhua$ docker push aninputforce/tomcat7-bind80使用鏡像ChinaDreams:workspace kangcunhua$ docker pull aninputforce/tomcat7-bind80 ChinaDreams:workspace kangcunhua$ docker run --name www -it -p 80:80 aninputforce/tomcat7-bind80 /bin/bash root@ff63d8ac4776:/usr/local/tomcat# su kch $ pwd /usr/local/tomcat $ cd bin $ ./startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /docker-java-home/jre Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. $ curl localhost ....參考鏈接Is there a way for non-root processes to bind to “privileged” ports on Linux?請添加鏈接描述
Bye
51Reboot? K8s專場分享
這幾篇筆記寫完。對linux的認識更加深刻了。不過對于80端口的綁定,被真實商業環境折磨許久,研究分析實現了種種可能。后續或許會追加筆記為“茴香豆系列” :)時間:2019年1月4號21:00-22:00?
分享講師:GY 老師?10年一線軟件開發經驗,先后經歷了傳統安全公司,以及多家互聯網公司;在安全開發方面,曾開發過 Linux 防火墻、web 應用防火墻、Linux 安全內核加固,基于大流量的 Web 安全威脅分析等項目;在互聯網公司工作時,曾基于 DPDK 高性能網絡開發框架開發過基于全流量的網絡流量分析平臺和基于 Sflow 網絡流量分析平臺,基于 Golang 開發 SmartDNS 等;開發語言也是從C -> python -> golang 的轉變過程?現從事基于 K8S 和 Docker在私有云平臺建設方面的研發工作;具備豐富的Linux系統開發經驗、網絡開發經驗以及項目管理經驗;目前開發工作 90+% 都在用 Golang,Golang 是一門簡潔、高效、強大且靈活的編程語言。
參與方式:添加小助手wechat:18310139238,備注:公開課,拉入直播分享群與老師互動
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/33101.html
摘要:重啟后,不但轉發策略失效,重新執行轉發命令后仍舊不能訪問。方案稍后整理發布。第三輪投產時,通過和一線溝通,得知客戶這邊的策略是生產一律關閉防火墻。不過對于端口的綁定,被真實商業環境折磨許久,研究分析實現了種種可能。 前言 之前寫過 tomcat 單機多實例,最后解決 80 端口訪問用的是 iptables 轉發; 第三輪投產前,客戶做了遷移和擴容。重啟后,不但轉發策略失效,重新執行轉發...
摘要:創建用戶組并添加用戶。默認情況下是過濾掉所有的入站規則。初始命令表示一旦容器啟動,需要運行的命令,此時使用,表示什么也不做,只需進入命令行即可。1.什么是docker docker翻譯為搬運工,在這里應該可以理解為搬運應用的工具,也就是云.先了解其運用場景之后更容易對他形成深刻理解. Docker提供了一種可移植的配置標準化機制,允許你一致性地在不同的機器上運行同一個Container;...
摘要:概述應用一旦容器化以后,需要考慮的就是如何采集位于容器中的應用程序的打印日志供運維分析。 showImg(https://segmentfault.com/img/remote/1460000014146680); 概述 應用一旦容器化以后,需要考慮的就是如何采集位于Docker容器中的應用程序的打印日志供運維分析。典型的比如 SpringBoot應用的日志 收集。本文即將闡述如何利...
摘要:后臺運行容器后面的那個就是鏡像的名稱了啟動配置的配置文件下面貼出我的配置這個我在主機的文件中配置的指向,其實就是訪問的本機端口。 最近在學docker,順便配置了一下docker中的nginx與php,發現網上的關于docker中配置nginx與php的資料很少,而且有的也很舊,沒有太多的參考性,所以決定自己寫一篇,分享一下其中的經驗。 版本說明 docker: Version 17...
閱讀 2101·2021-11-18 10:02
閱讀 2850·2021-09-04 16:41
閱讀 1142·2019-08-30 15:55
閱讀 1405·2019-08-29 17:27
閱讀 1070·2019-08-29 17:12
閱讀 2535·2019-08-29 15:38
閱讀 2855·2019-08-29 13:02
閱讀 2831·2019-08-29 12:29