如何访问在Docker容器中运行的Spring应用程序?

时间:2018-10-03 18:40:14

标签: docker

我对docker文件有以下要求...

const matcher = (attr) => attr.nodeName.startsWith('evt:');
const directive = (source, target, attr) => {
  const eventName = attr.nodeName.slice(4);
  const callbackName = attr.nodeValue;
  target.addEventListener(eventName, source[callbackName].bind(source));
};

Slim.customDirective(matcher, directive); 

// usage: <li evt:ontransitionend="myFunction"></li>

然后配置弹簧...

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

所以它不是浏览器。

也试图像这样映射它...

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

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

1 个答案:

答案 0 :(得分:1)

在对Web服务(此处为Java Spring Boot应用程序)进行泊坞服务时,通常会发生的问题是不应使用localhost地址并将其替换为0.0.0.0

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

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

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