2017-08-05 40 views
0

我想在Docker容器中构建并运行我的Java Maven Web应用程序。我试着用下面的命令:在Web浏览器中看不到Java Maven Tomcat插件Web应用程序

docker run -it --name my_project -v "$PWD":/usr/src/my_project -w /usr/src/my_project maven:3.5.0-jdk-8 mvn clean install tomcat7:run 

它正确地复制资源,运行Maven全新安装(编译成功),并与被包含在我的pom.xml tomcat7 - Maven的插件运行。

一切工作正常和日志真的相似构建和当地我的Windows机器上运行:

Run info

不幸的是在Web浏览器中存在的信息“连接被拒绝”。

什么可能导致该问题?: - 我的应用程序是特定于Windows,无法在Linux上运行? - 应用程序是完全的应用程序和运行,但错误的是代理配置或端口没有配置?

我该如何进一步调查日志?尝试建立在Windows码头集装箱?

P.S.我使用适用于Windows Docker的Kitematic应用程序来检查容器的IP。

+0

如果向'docker run'命令添加'-p 9998:9998'参数,所有内容都会更改吗? – mgyongyosi

+0

@mgyongyosi Gryfiindor 10分。现在访问网址是可用和可见的。我更进一步了 - 谢谢:) – gooornik07

回答

2

可能有三个问题。一旦您使用-w代替-v

docker run -it --name my_project -v "$PWD":/usr/src/my_project -w /usr/src/my_project maven:3.5.0-jdk-8 mvn clean install tomcat7:run 

这一点我认为是一个错字,同时发布。接下来,您没有发布你的机器

docker run -p 9998:9998 -it --name my_project -v "$PWD":/usr/src/my_project -w /usr/src/my_project maven:3.5.0-jdk-8 mvn clean install tomcat7:run 

的端口这会从您的集装箱港口9998(右侧)映射到本地主机端口9998

第三也是最后一个,您的INFO日志说在localhost:9998上聆听。不是很好。因为这意味着你的战争只是听从容器内部产生的流量,而不是从容器外部流出。您需要配置您的战争,以便在容器内的所有接口上侦听,并且绑定应该是0.0.0.0:9998

+0

你是什么意思“仅在容器内部产生的流量”?我希望应用程序可以使用docekr在本地构建,但实际上它应该可以访问本地Windows文件(在容器外部)。我应该添加任何东西到容器或配置一些东西? – gooornik07

+1

听localhost意味着你听任何localhost上下文。在VM内部,它是一个虚拟机,容器内部是容器本身。因此,如果你的虚拟机或容器内有bash的终端,那么localhost会指出这一点。同样,监听本地主机的应用程序只会响应从该上下文中提出的请求。这就是为什么你总是需要听取'0.0.0.0'。关于需要使用卷装的文件系统。查看docker run命令的'-volume'或'-v'标志 –

相关问题