首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法调试Server容器SSL证书问题

问无法调试Server容器SSL证书问题
EN

Stack Overflow用户
提问于 2021-05-11 16:12:15
回答 1查看 1.5K关注 0票数 1

我有一个SQLServer2019容器,我试图用按照这里概述的步骤。证书来设置它,但是当我使用docker run运行容器时,它会进行一些旋转,然后出错:

无法初始化用户指定的证书配置。服务器正在关闭。验证证书配置是否正确。

容器在此时突然终止。因此,我尝试连接到一个shell进行调试,方法是使用-d标志旋转容器,然后使用docker exec -it [name] "bash"连接。但是我只有几分钟的时间在容器里打探,因为很明显上面描述的过程还在继续,它会很快出错,关闭,并把容器从我下面拉出来。

我从这个工作中得到的基本容器是mcr.microsoft.com/mssql/server:2019-latest。是否有任何方法可以获得无限时间来调试此证书颁发?

EN

回答 1

Stack Overflow用户

发布于 2021-05-12 13:58:48

从查看容器日志开始。例如,如果您的数据库容器名为sql2019,那么您可能会从主机发出类似的命令:

代码语言:javascript
复制
# docker logs sql2019
...
2021-05-12 13:09:14.47 spid26s     Error: 49940, Severity: 16, State: 1.
2021-05-12 13:09:14.47 spid26s     Unable to open one or more of the user-specified certificate file(s). Verify that the certificate file(s) exist with read permissions for the user and group running SQL Server.
2021-05-12 13:09:14.56 spid26s     Error: 49939, Severity: 16, State: 1.
2021-05-12 13:09:14.56 spid26s     Unable to initialize user-specified certificate configuration. The server is being shut down. Verify that the certificate is correctly configured. Error[30]. State[51].
...
db exited with code 1
db   | SQL Server 2019 will run as non-root by default.
db   | This container is running as user mssql.
db   | Your master database file is owned by mssql.
db   | To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.

这告诉我们一些重要的信息:

  • 我们知道文件路径是正确的,因为我们将它们放在Dockerfile和mssql.conf文件中。
  • 我们知道权限可能是一个问题,因为错误消息中提到了这些权限。
  • 我们知道Server服务是与用户mssql一起运行的,因此我们的权限需要允许这样做。

在您的Dockerfile中,可能有类似于以下内容的行:

代码语言:javascript
复制
COPY ./mssql.pem /etc/ssl/certs/mssql.pem
COPY ./mssql.key /etc/ssl/private/mssql.key
COPY ./mssql.conf /var/opt/mssql/mssql.conf

再次暂时注释掉mssql.conf行和docker up (没有配置文件):

代码语言:javascript
复制
COPY ./mssql.pem /etc/ssl/certs/mssql.pem
COPY ./mssql.key /etc/ssl/private/mssql.key
# COPY ./mssql.conf /var/opt/mssql/mssql.conf

在容器运行时,您可以获得一个CLI来检查/etc/ssl文件夹中的权限.

代码语言:javascript
复制
# ls -la /etc/ssl
total 32
drwxr-xr-x 1 root root  4096 Apr  3 03:26 .
drwxr-xr-x 1 root root  4096 May 12 13:34 ..
drwxr-xr-x 1 root root  4096 May 12 13:34 certs
-rw-r--r-- 1 root root 10909 Mar 22 11:37 openssl.cnf
drwx------ 1 root root  4096 May 12 13:34 private

注意,/etc/ssl/private文件夹是root用户拥有的,只有root用户可以访问。这些权限将阻止mssql用户读取/etc/ssl/private/mssql.key文件。

更新Dockerfile以使/etc/ssl/private文件夹可访问:

代码语言:javascript
复制
COPY ./mssql.pem /etc/ssl/certs/mssql.pem
COPY ./mssql.key /etc/ssl/private/mssql.key
COPY ./mssql.conf /var/opt/mssql/mssql.conf
USER root
RUN chmod 755 /etc/ssl/private
USER mssql

现在,当您使用docker up时,Server容器应该会成功启动。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67490566

复制
相关文章

相似问题

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