在Docker容器内部访问jboss 8080端口
我在centos6.7 docker收集器中运行jboss5。
使用run.sh -b 0.0.0.0
命令运行的JBoss使用run.sh -b 0.0.0.0
运行的容器运行docker run -i -t -p 8080:8080 my/jboss /bin/bash
这是我在容器中看到的
[root@e44f2bbab31a bin]# netstat -alnt Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:8083 0.0.0.0:* LISTEN
这是我在主机上看到的
15:04:17:(~)$ sudo docker ps [sudo] password for c0rp: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e44f2bbab31a my/jboss "/bin/bash" 4 hours ago Up 4 hours 0.0.0.0:8080->8080/tcp thirsty_franklin
当我试图通过localhost:8080
主机访问主机jboss应用程序localhost:8080
我看到ERROR 404: Not Found.
当我从容器内使用wget
检查本地主机:8080我看到相同的错误ERROR 404: Not Found.
如果我使用容器的IP地址,一切都可以。 问题是我如何将主机localhost:8080绑定到容器ip_address:8080?
localhost
是127.0.0.1
的别名。 这个地址用于回送。 这意味着您的请求将返回到networkingOSI模型层上的同一台计算机(通过ifconfig
命令中的lo0
接口)。 但是您可以使用请求到localhost
访问您的容器:
-
!!!非常非常肮脏的黑客! 不要使用它。 只是为了了解localhost问题。 您可以编辑主机文件(Mac示例):
sudo nano /private/etc/hosts
你会看到这样的东西:
127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost
只要用你的容器的IPreplace
127.0.0.1
。 我重复一遍:这只是为了了解localhost
-
您可以在
localhost
上运行NGINX
实例。 您可以将其configuration为将所有请求从localhost:8080
发送到containerIp:8080
(最佳变体,不containerIp:8080
任何configuration)