带有 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 文件中同时使用 imagebuild 似乎很奇怪。

【讨论】:

镜像和构建是因为我使用相同的 docker-compose 文件来构建和运行应用程序 按照建议,我使用 443:8443 将机器上的 443 映射到应用程序上的 8443。这在单个节点上运行,但是在节点 1 上部署了 docker swarm 和应用程序,当我通过 swarm url 访问应用程序时得到 404,但使用 node01 IP 地址可以正常工作。有什么建议吗?

以上是关于带有 Docker 容器化 Spring Boot 应用程序的 HTTPS 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Docker容器化Spring Boot应用程序的Application.properties [重复]

Spring Boot + MySQL docker 容器

Docker实战系列——第四话-- 将你的spring-boot应用进行容器化的几种常见玩法

Docker实战系列——第四话-- 将你的spring-boot应用进行容器化的几种常见玩法

使用 Liquibase 的 Spring Boot 未在 Docker 中执行

Docker 容器整合 Spring Boot 应用