拉取镜像并启动

搜索并拉取镜像:

docker search tomcat                
docker pull tomcat

创建并启动一个容器:

docker run -d -p 8080:8080 --name tomcat_web  --restart=always tomcat  # -d 后台运行容器,并返回容器id

查看容器是否启动,并记录id:

docker ps # docker ps会显示运行中的容器,这里id是 3464a0ec25d0

本地访问看看效果(浏览器输入localhost:8080) :

curl localhost:8080  # 如果是命令行,用curl访问网址

竟然报错: HTTP Status 404 – 未找到

404问题处理

原因分析

是因为webapps是默认目录,但是它是空的,webapps.dist目录里面有实际的内容。

解决方案

进入容器内部:

docker exec -it 3464a0ec25d0 /bin/bash  # -it表示以交互模式 /bin/bash 表示用什么交互

查看下:

ls webapps; # 空的
ls webapps.dist; # 这里面才有ROOT等内容

ok,确实是这里的问题:

mv webapps webapps.bak; # 空的丢掉,容器运行中不支持rm,所以mv吧
mv webapps.dist webapps; # 换成对的

不用重启,再访问试试:

curl localhost:8080  # 返回index.html的一堆标签,成功

本地搞定了,外网访问发现失败:无法访问此网站

外网访问失败问题处理

分析

很有可能是没有开启IP转发功能,linux默认不开启这个功能,但是使用路由或代理,需要开启这个功能。

解决方案

查看ip转发状态(这2条命令都行):

sysctl net.ipv4.ip_forward  # 0表示未开启
cat /proc/sys/net/ipv4/ip_forward #

如果是0,那么设置为1 (这2条命令都行):

sysctl -w net.ipv4.ip_forward=1  # 设置为1,表示开启
echo 1 > /proc/sys/net/ipv4/ip_forward #

发现可以外网访问了。