tomcat - 无法访问在 Docker 容器中启动的 Tomcat

标签 tomcat docker portforwarding

我将 Tomcat 作为 Docker 容器启动:

$ docker run -dP tomcat

并且进程正确启动:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                     NAMES
48b87e545c18        tomcat              "catalina.sh run"   About a minute ago   Up About a minute   0.0.0.0:32769->8080/tcp   hopeful_ardinghelli

$ docker logs 48b87e545c18
16-Sep-2015 17:16:38.027 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.0.26
16-Sep-2015 17:16:38.037 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Aug 18 2015 11:38:37 UTC
16-Sep-2015 17:16:38.037 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.0.26.0
16-Sep-2015 17:16:38.038 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
16-Sep-2015 17:16:38.038 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.0.9-boot2docker
16-Sep-2015 17:16:38.038 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
16-Sep-2015 17:16:38.039 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/lib/jvm/java-7-openjdk-amd64/jre
16-Sep-2015 17:16:38.039 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.7.0_79-b14
16-Sep-2015 17:16:38.040 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
16-Sep-2015 17:16:38.040 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
16-Sep-2015 17:16:38.041 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
16-Sep-2015 17:16:38.041 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
16-Sep-2015 17:16:38.042 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
16-Sep-2015 17:16:38.042 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.endorsed.dirs=/usr/local/tomcat/endorsed
16-Sep-2015 17:16:38.043 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
16-Sep-2015 17:16:38.043 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
16-Sep-2015 17:16:38.044 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
16-Sep-2015 17:16:38.044 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib
16-Sep-2015 17:16:38.226 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
16-Sep-2015 17:16:38.267 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
16-Sep-2015 17:16:38.272 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
16-Sep-2015 17:16:38.274 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
16-Sep-2015 17:16:38.282 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1251 ms
16-Sep-2015 17:16:38.325 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
16-Sep-2015 17:16:38.341 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.0.26
16-Sep-2015 17:16:38.374 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/host-manager
16-Sep-2015 17:17:16.231 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [36,979] milliseconds.
16-Sep-2015 17:17:16.276 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/host-manager has finished in 37,901 ms
16-Sep-2015 17:17:16.276 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/docs
16-Sep-2015 17:17:16.361 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/docs has finished in 85 ms
16-Sep-2015 17:17:16.362 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/examples
16-Sep-2015 17:17:17.221 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/examples has finished in 859 ms
16-Sep-2015 17:17:17.242 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/ROOT
16-Sep-2015 17:17:17.343 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/ROOT has finished in 101 ms
16-Sep-2015 17:17:17.354 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/manager
16-Sep-2015 17:17:17.452 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/manager has finished in 98 ms
16-Sep-2015 17:17:17.460 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
16-Sep-2015 17:17:17.484 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
16-Sep-2015 17:17:17.487 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 39204 ms

但是当我在浏览器中通过 URL http://localhost:32769 访问服务器时,出现连接被拒绝错误。我还尝试明确发布端口:

$ docker run -d -p 8888:8080 tomcat

或者以交互式 shell 模式启动容器:

$ docker run -it -p 8888:8080 tomcat

但都没有帮助:http://localhost:8888 拒绝连接。我将如何解决这个问题?

最佳答案

我刚刚在 DigitalOcean Docker 虚拟机上对此进行了测试:

root@33b54c81-d980-41a4-982a-f0449663b68e:~# docker run -dP tomcat
Unable to find image 'tomcat:latest' locally
latest: Pulling from library/tomcat
843e2bded498: Pull complete 
...
Status: Downloaded newer image for tomcat:latest
41cea0a1fede58d066af0f6ce5fc17aef66d4b4912244cf4966b5f459b881e1b

容器运行:

root@33b54c81-d980-41a4-982a-f0449663b68e:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
41cea0a1fede        tomcat              "catalina.sh run"        2 minutes ago       Up 2 minutes        0.0.0.0:32768->8080/tcp   mad_panini

通过docker-proxy主机端口映射测试:

root@33b54c81-d980-41a4-982a-f0449663b68e:~# telnet localhost 32768
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
host: localhost

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
...

请注意,Docker 还在 iptables 中打了一个洞,允许与容器直接通信(无需主机端口映射):

root@33b54c81-d980-41a4-982a-f0449663b68e:~# iptables -L
...
Chain DOCKER (1 references)
target     prot opt source               destination         
ALLOW      all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             172.17.0.1           tcp dpt:http-alt

直接测试:

root@33b54c81-d980-41a4-982a-f0449663b68e:~# telnet 172.17.0.1 8080
Trying 172.17.0.1...
Connected to 172.17.0.1.
Escape character is '^]'.
GET / HTTP/1.1
host: localhost

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
...

您还可以尝试将 --net=host 参数传递给 docker run,这会将主机的网络直接暴露给容器。

希望这有帮助..

-- ab1

关于tomcat - 无法访问在 Docker 容器中启动的 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32615252/

相关文章:

java - Mule HTTP 连接重置

node.js - 通过Docker运行简单的Node.js时无法找到HelloWorld.js

Apache2 - 子域到端口 -> 转发

Tomcat jdbc realm security 和 jersey jax-rs

tomcat - 在xampp中升级tomcat

docker - 为 wurstmeister/kafka docker 镜像定义 Zookeeper znode

docker - 是否可以不使用ExeUtils::MakeMaker安装文档?

docker - 使用Docker的Virtualbox端口转发

python - 使用外部IP地址连接到服务器时出现Curl "Connection Refused"

java - 尝试运行 Grails 应用程序时出错