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

前端之家收集整理的这篇文章主要介绍了java – Mac主机不喜欢Docker容器端口转发前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_1@我是第一次尝试使用Docker,我正试图让一个Spring Boot Web应用程序在Docker容器中运行.我正在构建应用程序(将其打包成一个独立的jar),然后将其添加到Docker镜像(这就是我想要的).

@H_404_1@您可以在Bootup repo on GitHub找到我的SSCCE,其自述文件具有重现我所看到的所有说明.但基本上:

@H_404_1@>我将Web应用程序构建到jar中
>运行docker build -t bootup.哪个成功了
>运行docker run -it -p 9200:9200 -d –name bootup bootup然后容器似乎启动就好了,就像下面的docker ps输出的证据一样
>但是,当我将浏览器指向http:// localhost:9200时,我什么都没得到

@H_404_1@docker ps输出

@H_404_1@

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
@H_404_1@Web应用程序是configured to run on port 9200,而不是Java默认值8080.您可以通过运行./gradlew clean build&&&和amp;& amp;& amp;& amp;& java -jar build / libs / bootup.jar.

@H_404_1@据我所知,我的主机上没有运行阻止端口的防火墙(我在Mac 10.11.5上验证了系统偏好设置>>安全和隐私>>防火墙已关闭).

@H_404_1@谁能发现我出错的地方?

@H_404_1@更新:

@H_404_1@我在主机上运行了curl,netstat和lsof:

@H_404_1@

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 
@H_404_1@然后docker执行到容器中并运行另一个netstat:

@H_404_1@

CONTAINER:
netstat -an | grep 9200
bash: netstat: command not found
@H_404_1@更新w /照片:

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

@H_404_1@

enter image description here

@H_404_1@http:// localhost:9200源代码图片

@H_404_1@

enter image description here

@H_404_1@Chrome Developer Tools在http:// localhost:9200检查页面图片

@H_404_1@

enter image description here

@H_404_1@Chrome开发者工具中“网络”标签图片

@H_404_1@

enter image description here

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

最佳答案
要在这里添加另一个答案,因为我看到了与您发布的Github Repo相关的内容

@H_404_1@因此repo是一个带有application.yml文件的spring boot repo.

@H_404_1@您的Dockerfile如下所示:

@H_404_1@

FROM openjdk:8

RUN mkdir /opt/bootup

ADD build/libs/bootup.jar /opt/bootup
WORKDIR /opt/bootup
EXPOSE 9200
ENTRYPOINT java -jar bootup.jar
@H_404_1@这是将构建的jar添加到图像中.如果我的理解是正确的,那么jar不包含application.yml,因为:

@H_404_1@>它不是构建的一部分(gradle只打包src / main).它位于项目根文件夹中
>它没有明确添加到Docker

@H_404_1@因此,可以假设您的应用程序实际上是在8080(默认值)上运行?

@H_404_1@可以尝试的几个选项:

@H_404_1@>尝试暴露8080而不是9200(或暴露两者),看看是否有所作为?
> entrypoint命令可以附加端口–server.port = 9200
>应该将application.yml文件添加到映像中(您可能需要添加一个参数来正确引用它)[ADD application.yml / opt / bootup,在第一个ADD命令之后]
>在src / main / resources中包含application.yml文件,以便spring boot可以自动获取它.

@H_404_1@参考

@H_404_1@Spring Boot reference documentation on the order of loading for external configuration

猜你在找的Docker相关文章