在HTTPS上运行docker服务

时间:2018-06-12 06:02:32

标签: docker docker-compose docker-swarm

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

DockerFile

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

搬运工-compose.yml

version: '3.4'

services:

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

搬运工-compose.override.yml

version: '3.4'

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

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

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

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

我需要遵循哪些步骤?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

感谢杰罗姆的回答。

我做了以下事情让https处理我的容器。我希望这可以帮助某人。

  1. 将自签名证书添加到此脚本的图像中:
  2. <强> certificate.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
    
    1. 我的 docker-compose.override.yml 文件中的更改:已添加端口443。
    2.    version: '3.4'
           services:
             testapp.svc:
               ports:
                 - "9091:80"
                 - "9092:443"
      
      1. 我的Dockerfile中的更改
      2.     FROM microsoft/aspnet:4.7.1
            WORKDIR /inetpub/wwwroot
            EXPOSE 80 
            EXPOSE 443
            COPY index.html .
            COPY certificate.ps1 .
            RUN powershell.exe ./certificate.ps1