带有 Docker 容器化 Spring Boot 应用程序的 HTTPS 不起作用
Posted
技术标签:
【中文标题】带有 Docker 容器化 Spring Boot 应用程序的 HTTPS 不起作用【英文标题】:HTTPS with Docker Containerised Spring Boot App is not working 【发布时间】:2017-04-23 06:07:49 【问题描述】:以下是我添加到 application.properties 文件以启用 HTTPS 的条目:
server.port: 80
server.ssl.key-store: classpath:keystore.p12
server.ssl.key-store-password: password
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat
当我启动 docker 容器时,无法使用 HTTPS 访问 url。但是如果我commemt 上面的行,http 是可访问的。这是应用程序作为 docker 镜像运行的时候。
如果我在本地机器上运行 spring boot 应用程序,则 https 可以正常工作。不知道哪里出了问题或遗漏了什么。
有关信息,我正在使用以下 Docker 撰写文件:
ms1:
image: aa/ms1:localubuntu
mem_limit: 512
environment:
SPRING_PROFILES_ACTIVE: docker-development-cloud
JAVA_OPTS: -Xms256m -Xmx512m
build:
context: ../../
dockerfile: ms1/src/main/dockerBuildRelease/Dockerfile
ports:
- "443:443"
restart: always
networks:
- cloud
【问题讨论】:
你试过server.port: 443
吗?您可能还需要打开容器上的端口。您可以尝试省略classpath:
吗?
另外请发布您的 docker run 命令
我正在使用 docker-compose,它只有在使用 server.port: 443 和 ms1: image: aa/ms1:localubuntu mem_limit: 512M environment: SPRING_PROFILES_ACTIVE: docker-development-cloud JAVA_OPTS: -Xms256m -Xmx512m build: context: ../../ dockerfile: ms1/src/main/dockerBuildRelease/Dockerfile ports: - "443:443" restart: always networks: - cloud
时才有效
但是如果我在 compose 中尝试 "8000:443" 然后执行 server.port: 8000 它不起作用。
@Santosh 你发现问题到底出在哪里了吗?
【参考方案1】:
为了在 Docker 上运行,您需要:
使用有效端口启动您的服务器(有效,我的意思是 443 或另一个未保留的端口,例如 8443)。如您所知,这是通过在您的application.yml
文件中设置 server.port
属性来完成的
在docker-compose.yml
文件中公开服务器端口。请记住,语法是host:container
,因此假设您在端口443
上配置了Spring Boot 应用程序,并希望将其公开到主机上的端口8443
,您的端口配置将如下所示:8443:443
另外,我觉得你在 docker-compose.yml
文件中同时使用 image
和 build
似乎很奇怪。
【讨论】:
镜像和构建是因为我使用相同的 docker-compose 文件来构建和运行应用程序 按照建议,我使用 443:8443 将机器上的 443 映射到应用程序上的 8443。这在单个节点上运行,但是在节点 1 上部署了 docker swarm 和应用程序,当我通过 swarm url 访问应用程序时得到 404,但使用 node01 IP 地址可以正常工作。有什么建议吗?以上是关于带有 Docker 容器化 Spring Boot 应用程序的 HTTPS 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Docker容器化Spring Boot应用程序的Application.properties [重复]
Docker实战系列——第四话-- 将你的spring-boot应用进行容器化的几种常见玩法
Docker实战系列——第四话-- 将你的spring-boot应用进行容器化的几种常见玩法