我有一个非常简单的spring boot
web应用程序,我使用spring初始化器创建。
我添加了以下controller
:
@Controller
@RequestMapping("hello")
public class TestController {
@GetMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> sayHello() {
return ResponseEntity.ok("Hello!");
}
}
当我在intelij
本地运行它时,我可以成功地击中以下端点并获得响应:
http://localhost:8080/hello
我已经将使用jib
创建的映像推送到我的docker hub
注册表,并且可以成功地提取映像。
然而,当我通过docker
运行container
时,如下所示,我得到This site can’t be reached
在相同的URL。
docker run --name localJibExample123 -d -p 8080:80 bc2cbf3b85d1
我能够运行其他容器ok,可以击中端点,这里的问题是什么?
正在运行的docker ps为我正在运行的容器返回这个:
"java -cp /app/resou…" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp localJibExample222
所以我的应用程序应该是可访问的:
http://localhost:8080/hello
默认情况下,Spring-boot在端口8080
上运行。我们在docker run ...
命令中使用的端口映射将主机的端口8080
映射到容器的端口80
(... -p 8080:80 ...
,相关docker run
文档(docs.docker.com
))。由于在容器的80
端口上没有任何运行,所以在访问http://localhost:8080
时没有得到响应。
修复是直接的:我们用docker run ... -p 8080:8080 ...
替换docker run ... -p 8080:80 ...
。这将映射到容器的端口8080
, spring引导应用程序正在监听该端口。当我们现在访问http://localhost:8080
时,我们将得到一个响应。