jlthlx 发表于 2019-2-20 08:15:37

Docker 快速验证:不转发让 Tomcat 绑定 80 端口

前言
  之前写过 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:8080tomcat: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:80tomcat: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   10 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.xml

ChinaDreams: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
找到

golang 的转变过程?现从事基于 K8S 和 Docker在私有云平台建设方面的研发工作;具备丰富的Linux系统开发经验、网络开发经验以及项目管理经验;目前开发工作 90+% 都在用 Golang,Golang 是一门简洁、高效、强大且灵活的编程语言。
  参与方式:扫码添加小助手wechat:18310139238,备注:公开课,拉入直播分享群与老师互动



页: [1]
查看完整版本: Docker 快速验证:不转发让 Tomcat 绑定 80 端口