在 HTTPS 上运行 docker 服务

问题描述 投票:0回答:3

目前,我使用以下文件运行一个简单的 docker 容器。

Docker 文件

FROM microsoft/aspnet:4.7.1
WORKDIR /inetpub/wwwroot
EXPOSE 80
COPY index.html .

docker-compose.yml

version: '3.4'

services:

testapp:
  image: mytestapp:${TAG:-latest}
build:
  context: .
  dockerfile: Dockerfile

docker-compose.override.yml

version: '3.4'

services:
  testapp:
   ports:
    - "9091:80"

我使用 Windows 映像通过以下命令创建我的容器,我可以通过 http://localhost:9091/ 访问它。

docker-compose -f docker-compose.yml -f docker-compose.override.yml build

我想使用 HTTPS 而不是 http 来访问我的应用程序。

我需要遵循哪些步骤?

docker docker-compose docker-swarm
3个回答
29
投票

感谢杰罗姆的回答。我做了以下事情来让 https 在我的容器上工作。我希望这对某人有帮助。

此映像上有 IIS。

  1. 从此脚本将自签名证书添加到图像:

证书.ps1

  1. 创建自签名证书。
  2. 将其安装在本地证书存储中。
  3. 创建 HTTPs 绑定并将生成的自签名证书添加到具有我的 Web 应用程序的默认网站
import-module webadministration

cd cert:
$cert = New-SelfSignedCertificate -DnsName myweb -Friendlyname MyCert -CertStoreLocation Cert:\LocalMachine\My

$rootStore = New-Object System.Security.Cryptography.X509Certificates.X509Store -ArgumentList Root, LocalMachine

$rootStore.Open("MaxAllowed")
$rootStore.Add($cert)
$rootStore.Close()

cd iis:
new-item -path IIS:\SslBindings\0.0.0.0!443 -value $cert
New-WebBinding -Name "Default Web Site" -IP "*" -Port 443 -Protocol https
iisreset
  1. 我的 docker-compose.override.yml 文件中的更改:添加了端口 443。
   version: '3.4'
     services:
       testapp.svc:
         ports:
           - "9091:80"
           - "9092:443"
  1. 我的 Dockerfile 中的更改
    FROM microsoft/aspnet:4.7.1
    WORKDIR /inetpub/wwwroot
    EXPOSE 80 
    EXPOSE 443
    COPY index.html .
    COPY certificate.ps1 .
    RUN powershell.exe ./certificate.ps1

20
投票
  1. 您需要配置 Web 服务器(在 docker 应用程序内)以启用 HTTPS。
  2. 在docker上打开SSL端口(443)

    • 您可以考虑使用 NGINX 作为网络服务器的反向代理并在 nginx 中配置 SSL
    • 另一方面,如果这是一个公共站点,您可以查看 LetsEncrypt 来为您的域获取免费的 SSL 证书。

0
投票

您可以使用 HTTPS-PORTAL 来实现此目的。

https://hub.docker.com/r/steveltn/https-portal/

© www.soinside.com 2019 - 2024. All rights reserved.