Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Docker容器中运行的SQL Server 2017 Linux映像中,从.cer和.p7b创建证书_Docker_Encryption_Sql Server 2017 - Fatal编程技术网

在Docker容器中运行的SQL Server 2017 Linux映像中,从.cer和.p7b创建证书

在Docker容器中运行的SQL Server 2017 Linux映像中,从.cer和.p7b创建证书,docker,encryption,sql-server-2017,Docker,Encryption,Sql Server 2017,我已下载SQL Server 2017 Linux映像并在容器中运行。 接下来,我已从SQL Server Management Studio 2017连接到容器。 然后我使用“docker cp”将.bak文件复制到“/var/opt/mssql/backup” 但它需要一个加密密钥来恢复 因此,在SSMS中,我打开容器的查询窗口并运行以下命令: USE master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd'; GO

我已下载SQL Server 2017 Linux映像并在容器中运行。 接下来,我已从SQL Server Management Studio 2017连接到容器。 然后我使用“docker cp”将.bak文件复制到“/var/opt/mssql/backup”

但它需要一个加密密钥来恢复

因此,在SSMS中,我打开容器的查询窗口并运行以下命令:

USE master;
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd';
GO

CREATE CERTIFICATE CertificateName FROM FILE = 'C:\cert.cer' WITH PRIVATE 
KEY (FILE = 'C:\key.p7b', DECRYPTION BY PASSWORD = '********');
当我运行最后一个时,我得到以下错误: 证书、非对称密钥或私钥文件无效或不存在;或者您对其没有权限

如何为Docker容器执行此操作? 我可以从本地文件系统获取文件吗?
或者我需要将其复制到“/var/opt/mssql/”中,然后从中获取信息吗?

Docker显然无法读取本地文件系统中的cer和关键文件。 以下是我所做的:

在命令提示下,在容器中创建一个dir来保存键

docker exec -it sqlcontainer1 mkdir /var/opt/mssql/setup
docker cp "C:\Temp\cert.cer" sqlcontainer1:/var/opt/mssql/setup
docker cp "C:\Temp\key.p7b" sqlcontainer1:/var/opt/mssql/setup
然后我回到SSMS并再次运行命令:

--DROP MASTER KEY

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '********';
GO

CREATE CERTIFICATE CertName FROM FILE = '/var/opt/mssql/setup/cert.cer' WITH 
PRIVATE KEY (FILE = '/var/opt/mssql/setup/key.p7b', DECRYPTION BY PASSWORD = 
'********');