在HTTPS上运行docker服务

mar*_*ker 8 docker docker-compose docker-swarm

当前,我通过使用以下文件运行一个简单的Docker容器。

Docker文件

FROM microsoft/aspnet:4.7.1
WORKDIR /inetpub/wwwroot
EXPOSE 80
COPY index.html .
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '3.4'

services:

testapp:
  image: mytestapp:${TAG:-latest}
build:
  context: .
  dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)

docker-compose.override.yml

version: '3.4'

services:
  testapp:
   ports:
    - "9091:80"
Run Code Online (Sandbox Code Playgroud)

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

docker-compose -f docker-compose.yml -f docker-compose.override.yml build
Run Code Online (Sandbox Code Playgroud)

我想使用HTTPS而非http访问我的应用程序。

我需要遵循哪些步骤?

mar*_*ker 9

感谢Jerome的回答。我做了以下事情来使https在我的容器上工作。我希望这可能对某人有所帮助。

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

证书.ps1

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
Run Code Online (Sandbox Code Playgroud)
  1. 的docker-compose.override.yml文件中的更改:添加了端口443。
   version: '3.4'
     services:
       testapp.svc:
         ports:
           - "9091:80"
           - "9092:443"
Run Code Online (Sandbox Code Playgroud)
  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
Run Code Online (Sandbox Code Playgroud)


Jer*_*ony 6

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

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

  • 你好,Jerome,我将从 docker 主机本地调用 `https://localhost:9010/` 来访问 docker 容器内的 https 服务器。在这种情况下还应该使用 NGINX 或 Letsencrypt 吗?谢谢 (2认同)