【问题标题】:How do I access a spring app running in a docker container?如何访问在 docker 容器中运行的 spring 应用程序?
【发布时间】:2019-03-09 01:53:30
【问题描述】:

我有以下 docker 文件...

FROM openjdk:11-jdk-slim
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Dexternal.config.active='false'","-jar","/app.jar"]

还有弹簧配置...

docker {
  springBootApplication {
    baseImage = 'openjdk:11-jdk-slim'
    ports = [9090, 8080]
    tag = 'app:0.2'
  }
}

一切似乎都开始了文件,我看到了

Started Application in 8.743 seconds (JVM running for 9.153)

我明白了……

f46b4cbfa799        646eced45077        "java -jar /app/simp…"   15 minutes ago      Up 15 minutes                 8080/tcp, 9090/tcp   mystifying_kirch

但是当我运行docker inspect <imageId> | grep "IPAddress" 并像http://<IP>:8080 这样在浏览器中输入该地址时,我收到超时错误。我知道我可以在运行时使用端口映射,但是有没有一种方法可以在不映射到本地主机的情况下做到这一点?

我也试过这个...

curl 172.17.0.2:8080
curl: (7) Failed to connect to 172.17.0.2 port 8080: Operation timed out

所以不是浏览器。

也试过这样映射...

0.0.0.0:8080->8080/tcp, 9090/tcp

但是 localhost:8080(或 ip 地址)发送一个空响应“没有发送任何数据。”

【问题讨论】:

  • 你使用哪个 docker 命令来运行镜像?
  • 第一个是直接从 gradle 插件提供的。当那不起作用时,我尝试使用docker手动运行它(我传递了一堆环境)... docker run -e DB_URL=$DB_URL -e DB_PORT=$DB_PORT -e DB_USER=$DB_USER ... -p 8080:8080 646eced45077
  • 另一个问题:docker引擎运行在哪个操作系统上?
  • 您需要在 Dockerfile 中公开您的容器端口。示例:EXPOSE 8080。docs.docker.com/engine/reference/builder/#parser-directives
  • 这就是我使用的例子 FYI dzone.com/articles/…

标签: docker


【解决方案1】:

Docker 化 Web 服务(此处为 Java Spring Boot 应用程序)时发生的典型问题是不应使用 localhost 地址并将其替换为 0.0.0.0

有关更多详细信息,请参阅此 SO answer,它很好地解释了在 Docker 上下文中代表 localhost 的内容。

关于0.0.0.0 地址,这个special IP 在这里仅表示“任何IPv4 地址”。

最后,正如 OP 在评论中确认的那样,对于 Spring Boot,只需在 application.properties 文件中分配 server.address 属性即可实现此目的(参见 documentation)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2018-07-11
    • 2018-02-07
    • 2020-08-10
    • 2019-10-19
    • 2019-08-23
    • 2019-11-16
    相关资源
    最近更新 更多