Docker容器中的Wildfly无法启动


10

我正在尝试访问在Windows 10 Pro中的Docker容器上运行的Wildfly的欢迎页面。这是我所做的:

拉出图片:

docker pull jboss/wildfly

运行Wildfly容器(这很好,在Wildfly日志中,我可以看到它已正确启动):

docker run -it -p 8080:8080 jboss/wildfly

查找容器ID:

docker ps

检查IP地址:

docker inspect -f "{{ .NetworkSettings.IPAddress }}" cac63ed21d78

IP地址是172.17.0.2,在浏览器中,我转到http://172.17.0.2:8080/,但是浏览器挂起并超时。我想念什么?

更新

我也尝试过127.0.0.1:8080,但也不起作用

更新2

控制台日志:

docker --version

#Docker version 19.03.1, build 74b1e89e8a

docker run hello-world

#Hello from Docker!

docker run --detach --publish 8080:80 --name webserver nginx

#Unable to find image 'nginx:latest' locally
#latest: Pulling from library/nginx
#8ec398bc0356: Pull complete
#465560073b6f: Pull complete
#f473f9fd0a8c: Pull complete
#Digest:  sha256:b2d89d0a210398b4d1120b3e3a7672c16a4ba09c2c4a0395f18b9f7999b768f2
#Status: Downloaded newer image for nginx:latest
#c5cdb6de11240b5fe33bc424779721e1b44948797fd6ff389004d0766b71dd17

docker ps

#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 
#nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver

请参阅答案stackoverflow.com/a/43762751/7873775并尝试10.0.75.1:8080和10.0.75.2:8080。
Evgeniy Khyst

抱歉,但这没用。我在同一台Windows 10机器上同时运行了docker和浏览器,10.0.75.x不是外部地址,浏览器试图在网络上找到它吗?
ps0604

1
好的,让我们尝试查找问题。请发布以下CLI命令的结果:1. docker --version,2. docker run hello-world,3. docker run --detach --publish 8080:80 --name webserver nginx,4 . ,然后尝试打开localhost:8080
Evgeniy Khyst

请参阅控制台日志更新的问题。我尝试过localhost:8080,它超时了。docker ps节目CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
ps0604

@Evgeniy Khyst我发现了这篇有关docker 网络的文章。它说在容器内运行的服务器必须侦听所有接口(本文的最后一部分),这是否适用?
ps0604

Answers:


3

默认情况下,创建容器时,它不会将其任何端口发布到外界。网络172.17.XX是内部的。如果需要将IP地址绑定到主机ip,请使用-p标志运行docker容器,如下所示:

-p 8080:8080

将容器中的TCP端口8080映射到Docker主机上的端口8080


如果未将端口发布给外界,那么为什么此示例有效?
ps0604

@如果您不正确地编辑回答,请查看问题,这正是我在做什么。
ps0604

@ ps0604听起来好像有网络问题。根据您的情况检查防火墙规则
Ivan Vovk

所以你的答案不正确?
ps0604

我的答案是正确的,因为它基于文档推荐。
伊万·沃夫克

3

来自:https : //docs.docker.com/docker-for-windows/networking/

端口转发适用于本地主机;--publish,-p或-P都可以。从Linux公开的端口将转发到主机。

因此应该可以从http:// localhost:8080访问


如果这样不起作用,请尝试Windows示例

docker run -d -p 80:80 --name webserver nginx

哪个应该可以访问http:// localhost:80

https://docs.docker.com/docker-for-windows/index#explore-the-application-and-run-examples


如果仍然失败,请尝试:

docker-machine ip default

并使用http:// [docker-machine-ip]:80


1
它在localhost:8080中不起作用,对不起
ps0604

您能否尝试我上面发布的示例,查看它是否与jboss / wildfly有关,还是您的Windows联网?
蒂哈尔

如果nginx不起作用,则可以运行“ docker-machine ip default”,然后尝试在此处使用IP代替localhost
Tyhal

0

关键信息是Docker container in Windows 10 Pro-这是Windows上Docker工作方式的非常通用的规范。可以有很多选择,例如Docker for Windows有/无Linux containersDocker toolbox远程情况下,...

通常,Windows上的Docker容器通常在某种虚拟机(Hyper-V,Virtualbox等)中运行。因此,还有其他网络层,可能无法直接从Windows网络名称空间访问。但是链接的示例在Linux机器上运行,该机器不存在此附加网络层。这就是为什么复制/粘贴的Linux示例在Windows上不起作用的原因。因此,像往常一样运行容器并暴露端口8080:

docker run -it -p 8080:8080 jboss/wildfly

但是用于访问的IP将有所不同,并且不能使用容器IP,因为很可能无法从Windows访问该内部docker网络。而是尝试使用Windows OS的IP。最终检查所用Docker on Windows解决方案的文档,并找到用于裸露端口的IP。

如果您具有高级的Windows / Linux网络技能,则可以通过中间VM网络层以某种方式将端口/容器从容器网络名称空间路由/转发到Windows网络层。但这可能非常复杂。


Jan,我安装了适用于Windows的Docker Desktop,下载了映像并按照上面的教程中的说明运行Wildfly容器。在控制台中,我看到它可以很好地启动,并且8080:8080它在理论上应该起作用,但事实并非如此。我不了解网络,应该从哪里开始寻找?
ps0604

@ ps0604如果您想盲目地学习Linux教程,请使用Linux。正如我提到的doc是您的朋友-docs.docker.com/docker-for-windows/networking明确提到的那样There is no docker0 bridge on Windows: Because of the way networking is implemented in Docker Desktop for Windows, you cannot see a docker0 interface on the host. This interface is actually within the virtual machine.。请处理该限制。
Jan Garaj

0

我有一个在Windows系统上工作的同龄人,面临同样的问题。他付出了很多努力,却无所适从。似乎Windows的Docker桌面会发生很多奇怪的事情。我们最终只为Windows安装了Linux子系统,并在那里安装了docker,从那时起,它对他来说就像是一种魅力。如果您希望坚持使用Windows,并且不介意在linux子系统上工作,那么我建议您采用这种方法。我们走得比Jan Garaj的建议要走得更远,只是觉得浪费时间。适用于Windows的Docker桌面旨在成为一个完整的环境,您可以在其中完全使用-使用dev容器等。使用Host-Container的东西很麻烦。


是的,我同意,我将在Ubuntu而不是Windows中创建容器,那里没有问题。唯一的事情是我在Windows中进行开发,因此我将不得不进行三遍测试,一次是在开发期间在Windows中进行测试,然后是在linux容器中进行测试,最后是将容器上载到云中时进行的测试。如果我可以在Windows中运行该容器,则只能进行两次测试。
ps0604

这就是为什么我建议使用Linux子系统的原因。.您实际上不必更改上下文3次,也许是2-2.5次;)
Sam Thomas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.