我有一个SQLServer2019容器,我试图用按照这里概述的步骤。证书来设置它,但是当我使用docker run运行容器时,它会进行一些旋转,然后出错:
无法初始化用户指定的证书配置。服务器正在关闭。验证证书配置是否正确。
容器在此时突然终止。因此,我尝试连接到一个shell进行调试,方法是使用-d标志旋转容器,然后使用docker exec -it [name] "bash"连接。但是我只有几分钟的时间在容器里打探,因为很明显上面描述的过程还在继续,它会很快出错,关闭,并把容器从我下面拉出来。
我从这个工作中得到的基本容器是mcr.microsoft.com/mssql/server:2019-latest。是否有任何方法可以获得无限时间来调试此证书颁发?
发布于 2021-05-12 13:58:48
从查看容器日志开始。例如,如果您的数据库容器名为sql2019,那么您可能会从主机发出类似的命令:
# 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文件中。mssql一起运行的,因此我们的权限需要允许这样做。在您的Dockerfile中,可能有类似于以下内容的行:
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 (没有配置文件):
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文件夹中的权限.
# 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文件夹可访问:
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容器应该会成功启动。
https://stackoverflow.com/questions/67490566
复制相似问题