首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当连接到码头容器中的SSL_ERROR_SYSCALL 6 web服务器时

当连接到码头容器中的SSL_ERROR_SYSCALL 6 web服务器时
EN

Stack Overflow用户
提问于 2022-02-04 15:34:28
回答 1查看 367关注 0票数 0

1. Web服务器代码

Test01.csproj:

代码语言:javascript
运行
复制
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)' == 'Release'">
    <PublishDir>../deploy/$(AssemblyName)</PublishDir>
    <PublishReadyToRun>true</PublishReadyToRun>
    <PublishSingleFile>true</PublishSingleFile>
    <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
    <DebugType>None</DebugType>
  </PropertyGroup>

  <Target Name="CopyCustomContentOnPublish" AfterTargets="Publish" Condition="'$(Configuration)' == 'Release'">
    <Copy SourceFiles="certificate.crt" DestinationFolder="../deploy/$(AssemblyName)" />
    <Copy SourceFiles="private-key.pem" DestinationFolder="../deploy/$(AssemblyName)" />
  </Target>

</Project>

Program.cs:

代码语言:javascript
运行
复制
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => $"{Environment.MachineName} - {DateTime.Now}\n");
app.Run();

appsettings.json:

代码语言:javascript
运行
复制
{
  "Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://localhost"
      }
    },
    "Certificates": {
      "Default": {
        "Path": "certificate.crt",
        "KeyPath": "private-key.pem"
      }
    }
  }
}

这将完美地编译和运行(Ubuntu21.10):

代码语言:javascript
运行
复制
$ dotnet build
$ sudo dotnet run --project Test01 --no-build

服务器工作于:

代码语言:javascript
运行
复制
$ curl -k "https://localhost"
server - 02/04/2022 15:08:50

需要使用-k,因为我使用的是自签名证书。

2. .NET部署

deploy.sh:

代码语言:javascript
运行
复制
rm -r deploy/*
dotnet clean
dotnet publish --no-self-contained -r linux-x64 -c Release

这会将服务器部署到deploy/Test01中。

代码语言:javascript
运行
复制
$ ls -al deploy/Test01
drwxrwxr-x 2 dev dev   4096 Feb  4 14:33 .
drwxrwxr-x 3 dev dev   4096 Feb  4 14:33 ..
-rwxr-xr-x 1 dev dev 150934 Feb  4 14:36 Test01
-rw-rw-r-- 1 dev dev    318 Feb  4 14:33 appsettings.json
-rw-rw-r-- 1 dev dev   2106 Feb  4 14:33 certificate.crt
-rw-rw-r-- 1 dev dev   3268 Feb  4 14:33 private-key.pem

服务器可以从此文件夹运行:

代码语言:javascript
运行
复制
$ cd deploy/Test01
$ sudo ./Test01
代码语言:javascript
运行
复制
$ curl -k "https://localhost"
server - 02/04/2022 15:17:15

3.码头货柜

Dockerfile:

代码语言:javascript
运行
复制
FROM mcr.microsoft.com/dotnet/aspnet
WORKDIR /opt/test01
COPY deploy/Test01 ./
ENTRYPOINT ["./Test01"]

创建图像:

代码语言:javascript
运行
复制
$ docker build -t test01:1.0.0 .
$ docker image ls
REPOSITORY                        TAG       IMAGE ID       CREATED          SIZE
test01                            1.0.0     962954c40135   42 minutes ago   208MB
mcr.microsoft.com/dotnet/aspnet   latest    53451db35067   9 days ago       208MB

启动集装箱:

代码语言:javascript
运行
复制
$ docker run -d -p 44302:443 --name test01 test01:1.0.0
$ docker container ls
CONTAINER ID   IMAGE          COMMAND      CREATED          STATUS          PORTS                                       NAMES
28f247a8a3d5   test01:1.0.0   "./Test01"   2 minutes ago    Up 2 minutes    0.0.0.0:44302->443/tcp, :::44302->443/tcp   test01

服务器的端口被重定向到主机:

代码语言:javascript
运行
复制
$ docker port test01
443/tcp -> 0.0.0.0:44302
443/tcp -> :::44302
$ sudo ss -tlp | grep docker
LISTEN 0      4096         0.0.0.0:44302       0.0.0.0:*    users:(("docker-proxy",pid=9054,fd=4))   
LISTEN 0      4096            [::]:44302          [::]:*    users:(("docker-proxy",pid=9059,fd=4))

4.问题

如果我试图从主机访问服务器,就会得到一个错误:

代码语言:javascript
运行
复制
$ curl -k https://localhost:44302
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:44302

详细的答复如下:

代码语言:javascript
运行
复制
$ curl -k -v https://localhost:44302
*   Trying 127.0.0.1:44302...
* Connected to localhost (127.0.0.1) port 44302 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:44302 
* Closing connection 0
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:44302

我做错了什么?谢谢你提前提供帮助!

EN

Stack Overflow用户

回答已采纳

发布于 2022-02-04 15:55:37

问题是服务器正在容器(source)内监听source。我不得不改变appsettings.json让它在0.0.0.0上听

代码语言:javascript
运行
复制
...
        "Url": "https://0.0.0.0"
...
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70988970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档