gpt4 book ai didi

macos - Mac 上的 Docker 正在运行但拒绝暴露端口

转载 作者:行者123 更新时间:2023-12-02 18:08:47 25 4
gpt4 key购买 nike

此处为 Mac,运行 Docker 社区版版本 17.12.0-ce-mac49 (21995)。

我已经使用 Dockerfile 对 Web 应用程序进行了 Docker 化,如下所示:

FROM openjdk:8

RUN mkdir /opt/myapp

ADD build/libs/myapp.jar /opt/myapp
ADD application.yml /opt/myapp
ADD logback.groovy /opt/myapp
WORKDIR /opt/myapp
EXPOSE 9200
ENTRYPOINT ["java", "-Dspring.config=.", "-jar", "myapp.jar"]

然后我像这样构建该图像:
docker build -t myapp .

然后我像这样运行该图像的容器:
docker run -it -p 9200:9200 --net="host" --env-file ~/myapp-local.env --name myapp myapp

在控制台中,我看到应用程序启动时没有任何错误,一切似乎都很好。甚至我的指标发布(每 20 秒发布一次心跳和其他健康指标)也像我期望的那样打印到控制台。一切似乎都很好。

除非我去运行 curl从另一个终端/ session 对我的应用程序:
curl -i -H "Content-Type: application/json" -X POST -d '{"username":"heyitsme","password":"12345"}' http://localhost:9200/v1/auth/signIn
curl: (7) Failed to connect to localhost port 9200: Connection refused

现在,如果这是 /v1/auth/signIn路径无效,或者如果我的请求实体/有效负载有问题,服务器会接收它并发送错误(我向你保证;我可以确认这完全相同 curl 在我运行Docker 之外的服务器作为独立服务)。

所以这绝对是 curl命令无法连接到 localhost:9200 .同样,当我在 Docker 之外运行我的应用程序时,同样的 curl命令完美运行,所以我知道我的应用程序正在尝试在端口 9200 上运行。

关于这里可能出了什么问题,或者我如何开始故障排除的任何想法?

最佳答案

运行容器的方式有 2 个相互冲突的部分:

  • -p 9200:9200说:“将容器的端口 9200 发布(绑定(bind))到主机的端口 9200
  • --net="host"说:“使用主机的网络堆栈”

  • 根据 Docker for Mac - 网络文档/ Known limitations, use cases, and workarounds ,您应该只发布一个端口:

    I want to connect to a container from the Mac

    Port forwarding works for localhost; --publish, -p, or -P all work. Ports exposed from Linux are forwarded to the Mac.

    Our current recommendation is to publish a port, or to connect from another container. This is what you need to do even on Linux if the container is on an overlay network, not a bridge network, as these are not routed.

    The command to run the nginx webserver shown in Getting Started is an example of this.

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

    关于macos - Mac 上的 Docker 正在运行但拒绝暴露端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414576/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com