java - Mac 主机不喜欢 Docker 容器端口转发

标签 java macos docker portforwarding docker-networking

我第一次尝试使用 Docker,并试图让 Spring Boot Web 应用程序在 Docker 容器中运行。我正在构建应用程序(将其打包成一个独立的 jar)并然后将其添加到 Docker 镜像中(这是我想要的)。

你可以找到我的SSCCE在此 Bootup repo on GitHub ,其 README 包含重现我所看到内容的所有说明。但基本上:

  • 我将网络应用程序构建到一个 jar 中
  • 运行 docker build -t bootup . 成功
  • 运行 docker run -it -p 9200:9200 -d --name bootup bootup 然后容器似乎启动得很好,正如 docker ps 所证明的那样> 下面输出
  • 但是,当我将浏览器指向 http://localhost:9200 时,我什么也得不到

docker ps 输出:

CONTAINER ID        IMAGE               COMMAND                  CREATED
a8c4ee64a1bc        bootup              "/bin/sh -c 'java -ja"   2 days ago

STATUS              PORTS                    NAMES
Up 12 seconds       0.0.0.0:9200->9200/tcp   bootup

网络应用程序是 configured to run on port 9200不是 Java 默认值 8080。您可以通过运行 ./gradlew clean build && java -jar build/libs/bootup.jar.

据我所知,我的主机上没有运行会阻塞端口的防火墙(我在 Mac 10.11.5 上并验证 System Preferences >> Security & Privacy >> Firewall 已打开关闭)。

谁能看出我哪里出错了?


更新:

我在主机上运行了curlnetstatlsof:

HOST:
curl http://localhost:9200
curl: (52) Empty reply from server

netstat -an | grep 9200
tcp6       0      0  ::1.9200               *.*                    LISTEN     
tcp4       0      0  *.9200                 *.*                    LISTEN 

lsof -n -i4TCP:9200 | grep LISTEN
com.docke 2578 myuser   19u  IPv4 <someHexNumber>      0t0  TCP *:wap-wsp (LISTEN)

然后docker exec进入容器并运行另一个netstat:

CONTAINER:
netstat -an | grep 9200
bash: netstat: command not found

更新照片:

我的浏览器 (Chrome) 的图片指向 http://localhost:9200:

enter image description here

源代码图片在http://localhost:9200:

enter image description here

Chrome 开发者工具在 http://localhost:9200 处检查页面的图片:

enter image description here

Chrome 开发者工具中 Network 标签的图片:

enter image description here

这到底是怎么回事?!?!?根据消息来源,浏览器应该正在渲染我的你好,来自 Dockerland! 消息就好了.根据实际浏览器页面,好像是网络错误。根据 Chrome 开发者工具,我的应用程序正在返回各种 HTML/CSS/JS 内容,这些内容甚至 远程 不属于我的应用程序(查看源代码,自己查看)!!!

最佳答案

Dockerfile 不会将 9200 暴露给守护进程。添加

EXPOSE 9200

ENTRYPOINT

之前的 Dockerfile

关于java - Mac 主机不喜欢 Docker 容器端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39166038/

相关文章:

Java:字符串填充失败

java - 一个传感器作为输出?

cocoa - 如何用cocoa隐藏UIAgent进程的窗口

docker - 如何告诉 docker-compose exec 从 stdin 读取?

docker - Sublime 插件在 docker 容器中执行

sql-server - 仅使用 Dockerfile 创建具有已恢复备份数据库的 SQL Server docker 镜像

java - Katharsis 结合 Spring Boot

java - 在 Mac OS X 上,如果我的应用程序尚未运行,通过双击文档来打开我的文档将会失败

Mac 操作系统中缺少 jQuery fancybox 关闭按钮 "X"

cocoa - 将 CoreData 与对象一起使用?