[英]Resize Docker Container of SQL Server
我想减轻我对容器化SQL Server的内存问题。 我在Windows 10,v 1709上运行它。
为了测试,我使用以下命令创建了一个SQL Server容器:
docker run -d -p 1433:1433 --name sql1 -e SA_PASSWORD=1Secure*Password1
-e ACCEPT_EULA=Y microsoft/mssql-server-windows-developer:2017-latest
在这个容器化的SQL实例中,我创建了一个有效的数据库,直到它变得太大。 我现在的内存错误不足。 例如,当我在SSMS中运行查询时,我收到“资源池中没有足够的系统内存'默认'来运行此查询。” 同样,当我检查SQL Server环形缓冲区时,我看到RESOURCE_MEMPHYSICAL_LOW
。 当我收到这些错误时,我的笔记本电脑中只有8台可用的16 GB内存正在使用中。 所以这不是真实物理内存的问题。
在Windows 10上,Docker for Windows在Hyper-V VM中运行容器,默认为1GIG RAM。 我可以通过启动我的容器,然后使用它进入交互模式来确认这一点:
PS C:\repos\somefolder> docker exec -it sql1 powershell
在交互模式下,按照其他SO示例 ,我看到以下结果:
PS C:\> systeminfo | findstr "Memory"
Total Physical Memory: 1,023 MB
Available Physical Memory: 221 MB
Virtual Memory: Max Size: 1,023 MB
Virtual Memory: Available: 82 MB
Virtual Memory: In Use: 941 MB
此外,当我运行sql1
docker stats
我可以看到我的sql1
容器正在使用750MiB到970MiB范围内的PRIV WORKING SET。
好的,所以我已经清楚地确认我需要提高Hyper-V VM 1GB限制。
如何在不丢失此容器内的数据库的情况下执行此操作? 我看到一个回答“use -m”选项 ,但我认为只有在首次创建容器时才有效。
Docker版本
$ docker version
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:12:48 2018
OS/Arch: windows/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.24)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:21:42 2018
OS/Arch: windows/amd64
Experimental: false
SQL Server映像允许您将JSON集中的数据库作为attach_dbs
环境变量附加。
我做的是这样的:
# escape=`
FROM microsoft/mssql-server-windows-express:2017-GA
LABEL MAINTAINER="Seba Gómez @sebagomez"
# SQL Databases
COPY data\ c:/data
ENV attach_dbs="[{'dbName':'MyDB','dbFiles':['C:\\data\\MyDB.mdf','C:\\data\\MyDB_log.ldf']}, {'dbName':'MyOtherDB','dbFiles':['C:\\data\\MyOtherDB.mdf','C:\\data\\MyOtherDB_log.ldf']}]" `
ACCEPT_EULA=Y `
sa_password="dbPassword!"
所有mdf和ldf文件都在我的dockerfile旁边的data
文件夹中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.